{"id":1174,"date":"2020-01-03T06:52:40","date_gmt":"2020-01-02T21:52:40","guid":{"rendered":"http:\/\/168.138.214.208\/?p=1174"},"modified":"2020-01-03T18:01:32","modified_gmt":"2020-01-03T09:01:32","slug":"post-1174","status":"publish","type":"post","link":"https:\/\/nobunobu1717.site\/?p=1174","title":{"rendered":"AWS Lambda\u3067GraphQL\u3092\u4f7f\u7528\u3059\u308b\u3002(Typescript)"},"content":{"rendered":"<div id=\"toc_container\" class=\"no_bullets\"><p class=\"toc_title\">Contents<\/p><ul class=\"toc_list\"><li><a href=\"#i\"><span class=\"toc_number toc_depth_1\">1<\/span> \u6982\u8981<\/a><\/li><li><a href=\"#i-2\"><span class=\"toc_number toc_depth_1\">2<\/span> \u524d\u63d0<\/a><\/li><li><a href=\"#API\"><span class=\"toc_number toc_depth_1\">3<\/span> API\u5b9a\u7fa9<\/a><\/li><li><a href=\"#i-3\"><span class=\"toc_number toc_depth_1\">4<\/span> \u624b\u9806<\/a><\/li><li><a href=\"#i-4\"><span class=\"toc_number toc_depth_1\">5<\/span> \u30ea\u30af\u30a8\u30b9\u30c8<\/a><\/li><li><a href=\"#i-5\"><span class=\"toc_number toc_depth_1\">6<\/span> \u307e\u3068\u3081<\/a><\/li><\/ul><\/div>\n<h2><span id=\"i\">\u6982\u8981<\/span><\/h2>\n<p>AWS Lambda\u4e0a\u3067GraphQL\u3092\u4f7f\u7528\u3057\u305fAPI\u3092\u516c\u958b\u3059\u308b\u305f\u3081\u306e\u5b9f\u88c5\u65b9\u6cd5\u306a\u3069\u306e\u7d39\u4ecb\u3002<\/p>\n<h2><span id=\"i-2\">\u524d\u63d0<\/span><\/h2>\n<p>\u4e0b\u8a18\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u305f\u65b9\u6cd5\u3067AWS Lambda\u7528\u306eTypescript\u306e\u30b3\u30fc\u30c9\u96db\u5f62\u3092\u4f5c\u6210\u3059\u308b\u3002<br \/>\n<a href=\"http:\/\/168.138.214.208\/?p=1164\">\u53c2\u7167<\/a><\/p>\n<p>\u4e0b\u8a18\u306e\u74b0\u5883\u3067\u5b9f\u65bd<br \/>\nmacOS 10.15.2<br \/>\nVSCode 1.41.1<\/p>\n<p>\u4e0b\u8a18\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u6e08\u3068\u3059\u308b<br \/>\nnode.js (v12.14.0)<br \/>\nyarn (v1.17.3)<\/p>\n<p>\u306a\u304a\u3001GraphQL\u81ea\u4f53\u306e\u7d30\u304b\u3044\u4ed5\u69d8\u3084\u8aac\u660e\u306f\u7701\u7565\u3059\u308b\u3002<br \/>\n\u5fc5\u8981\u306a\u5834\u5408\u30b0\u30b0\u308c\u3070\u3001GraphQL\u306b\u95a2\u3057\u3066\u306e\u8aac\u660e\u306f\u591a\u304f\u898b\u3064\u304b\u308b\u3068\u601d\u3046\u306e\u3067\u305d\u3061\u3089\u3092\u53c2\u7167\u3057\u3066\u307b\u3057\u3044\u3002<\/p>\n<h2><span id=\"API\">API\u5b9a\u7fa9<\/span><\/h2>\n<p>\u4eca\u56de\u306f\u4e0b\u8a18\u306e2\u7a2e\u985e\u306eAPI\u3092GraphQL\u3067\u5b9f\u88c5\u3059\u308b\u3002<\/p>\n<table border=\"1\" width=\"500\" cellspacing=\"0\" cellpadding=\"5\" bordercolor=\"#333333\">\n<tr>\n<th bgcolor=\"#EE0000\"><font color=\"#FFFFFF\">\u30b9\u30ad\u30fc\u30de\u540d<\/font><\/th>\n<th bgcolor=\"#EE0000\"><font color=\"#FFFFFF\">\u5f15\u6570<\/font><\/th>\n<th bgcolor=\"#EE0000\" ><font color=\"#FFFFFF\">\u8aac\u660e<\/font><\/th>\n<\/tr>\n<tr>\n<td bgcolor=\"#99CC00\" align=\"right\" nowrap>user<\/td>\n<td bgcolor=\"#FFFFFF\" align=\"right\" nowrap>id:string<\/td>\n<td bgcolor=\"#FFFFFF\" valign=\"top\">\u6307\u5b9a\u3055\u308c\u305fID\u306e\u30e6\u30fc\u30b6\u60c5\u5831\u3092\u53d6\u5f97<\/td>\n<\/tr>\n<tr>\n<td bgcolor=\"#99CC00\" align=\"right\" nowrap>users<\/td>\n<td bgcolor=\"#FFFFFF\" align=\"right\" nowrap>\u306a\u3057<\/td>\n<td bgcolor=\"#FFFFFF\" valign=\"top\" >\u5168\u30e6\u30fc\u30b6\u60c5\u5831\u3092\u53d6\u5f97<\/td>\n<\/tr>\n<\/table>\n<p>\u30e6\u30fc\u30b6\u60c5\u5831\u306f\u4e0b\u8a18\u3092\u6301\u3064<\/p>\n<table border=\"1\" width=\"500\" cellspacing=\"0\" cellpadding=\"5\" bordercolor=\"#333333\">\n<tr>\n<th bgcolor=\"#EE0000\"><font color=\"#FFFFFF\">\u30d1\u30e9\u30e1\u30fc\u30bf\u540d<\/font><\/th>\n<th bgcolor=\"#EE0000\"><font color=\"#FFFFFF\">\u578b<\/font><\/th>\n<th bgcolor=\"#EE0000\" ><font color=\"#FFFFFF\">\u8aac\u660e<\/font><\/th>\n<\/tr>\n<tr>\n<td bgcolor=\"#99CC00\" align=\"right\" nowrap>id<\/td>\n<td bgcolor=\"#FFFFFF\" align=\"right\" nowrap>String(ID)<\/td>\n<td bgcolor=\"#FFFFFF\" valign=\"top\">\u30e6\u30cb\u30fc\u30afID<\/td>\n<\/tr>\n<tr>\n<td bgcolor=\"#99CC00\" align=\"right\" nowrap>name<\/td>\n<td bgcolor=\"#FFFFFF\" align=\"right\" nowrap>String<\/td>\n<td bgcolor=\"#FFFFFF\" valign=\"top\" >\u540d\u524d<\/td>\n<\/tr>\n<tr>\n<td bgcolor=\"#99CC00\" align=\"right\" nowrap>age<\/td>\n<td bgcolor=\"#FFFFFF\" align=\"right\" nowrap>Int<\/td>\n<td bgcolor=\"#FFFFFF\" valign=\"top\" >\u5e74\u9f62<\/td>\n<\/tr>\n<\/table>\n<h2><span id=\"i-3\">\u624b\u9806<\/span><\/h2>\n<h3>\u6e96\u5099<\/h3>\n<p>GrapghQL\u7528\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3046\u3002<\/p>\n<pre class=\"lang:default decode:true \" >\r\nyarn add graphql\r\n<\/pre>\n<h3>\u5b9f\u88c5<\/h3>\n<p>\u500b\u3005\u306e\u306e\u8aac\u660e\u306f\u9806\u3092\u8ffd\u3063\u3066\u884c\u3046\u304c\u3001\u5168\u4f53\u306e\u30b3\u30fc\u30c9\u3092\u4e0b\u8a18\u306b\u793a\u3059\u3002<\/p>\n<pre class=\"lang:js decode:true \" >import * as lambda from 'aws-lambda';\r\nimport { graphql, buildSchema } from 'graphql';\r\n\r\nconst typeDefs = `\r\ntype Query {\r\n    user(id: Int!): User\r\n    users: [User]\r\n}\r\ntype User {\r\n    id: ID!\r\n    name: String!\r\n    age: Int\r\n}\r\n`;\r\n\r\ninterface User {\r\n  id: string;\r\n  name: string;\r\n  age: number;\r\n}\r\n\r\nconst resolvers = {\r\n  user: args => getUserById(args.id),\r\n  users: () => getUsers()\r\n};\r\n\r\nfunction getUserById(id: string): Promise&lt;User&gt; {\r\n  return new Promise((resolve, reject) =>; {\r\n    const user = {\r\n      id: id,\r\n      name: 'test',\r\n      age: 12\r\n    };\r\n    resolve(user);\r\n  });\r\n}\r\n\r\nfunction getUsers(): Promise&lt;User[]&gt; {\r\n  return new Promise((resolve, reject) =>; {\r\n    const users = [\r\n      {\r\n        id: '1',\r\n        name: 'test1',\r\n        age: 12\r\n      },\r\n      {\r\n        id: '2',\r\n        name: 'test2',\r\n        age: 45\r\n      }\r\n    ];\r\n    resolve(users);\r\n  });\r\n}\r\n\r\nexport const handler = async (\r\n  event: any,\r\n  context: lambda.Context,\r\n  callback: lambda.Callback\r\n) =>; {\r\n  \/\/\u30af\u30a8\u30ea\u306e\u5b9f\u884c\r\n  const result = await graphql(buildSchema(typeDefs), event.query, resolvers);\r\n  callback(null, result);\r\n};\r\n<\/pre>\n<h3>\u30b9\u30ad\u30fc\u30de\u304a\u3088\u3073\u30ea\u30be\u30eb\u30d0\u306e\u5b9a\u7fa9<\/h3>\n<p>GrapghQL\u3067\u5fc5\u8981\u3068\u306a\u308b\u30b9\u30ad\u30fc\u30de(typeDefs)\u3068\u30ea\u30be\u30eb\u30d0(resolvers)\u3092\u5b9a\u7fa9\u3059\u308b\u3002<\/p>\n<pre class=\"lang:js decode:true \" >\r\nconst typeDefs = `\r\ntype Query {\r\n    user(id: Int!): User\r\n    users: [User]\r\n}\r\ntype User {\r\n    id: ID!\r\n    name: String!\r\n    age: Int\r\n}\r\n`;\r\n\r\nconst resolvers = {\r\n  user: args => getUserById(args.id),\r\n  users: () => getUsers()\r\n};\r\n<\/pre>\n<p>\u30ea\u30be\u30eb\u30d0\u306b\u306f\u5404\u30b9\u30ad\u30fc\u30de\u3068\u5b9f\u969b\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u30b3\u30fc\u30c9\u306e\u7d10\u4ed8\u3051\u3092\u884c\u3046\u3002<br \/>\nuser\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u6765\u305f\u5834\u5408\u3001getUserById\u95a2\u6570<br \/>\nusers\u306e\u5834\u5408\u3001getUsers\u95a2\u6570\u304c\u547c\u3073\u51fa\u3055\u308c\u308b\u3088\u3046\u306b\u7d10\u4ed8\u3051\u3057\u3066\u3044\u308b\u3002<\/p>\n<h3>\u5404\u95a2\u6570\u306e\u5b9f\u88c5<\/h3>\n<p>\u30ea\u30be\u30eb\u30d0\u306b\u7d10\u3065\u3051\u3089\u308c\u305f\u95a2\u6570\u306e\u5b9f\u88c5\u3092\u884c\u3046\u3002<br \/>\n\u4eca\u56de\u306f\u30b5\u30f3\u30d7\u30eb\u3068\u3057\u3066\u56fa\u5b9a\u5024\u3092\u623b\u308a\u5024\u3068\u3057\u3066\u8fd4\u3059\u304c\u5b9f\u969b\u306e\u5834\u5408\u306f\u3001Dynamo\u3084RDS\u306a\u3069\u304b\u3089\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b\u51e6\u7406\u3092\u5b9f\u88c5\u3059\u308b\u3002<\/p>\n<pre class=\"lang:js decode:true \" >\r\ninterface User {\r\n  id: string;\r\n  name: string;\r\n  age: number;\r\n}\r\n\r\nfunction getUserById(id: string): Promise&lt;User&gt; {\r\n  return new Promise((resolve, reject) => {\r\n    const user = {\r\n      id: id,\r\n      name: 'test',\r\n      age: 12\r\n    };\r\n    resolve(user);\r\n  });\r\n}\r\n\r\nfunction getUsers(): Promise&lt;User[]&gt; {\r\n  return new Promise((resolve, reject) => {\r\n    const users = [\r\n      {\r\n        id: '1',\r\n        name: 'test1',\r\n        age: 12\r\n      },\r\n      {\r\n        id: '2',\r\n        name: 'test2',\r\n        age: 45\r\n      }\r\n    ];\r\n    resolve(users);\r\n  });\r\n}\r\n<\/pre>\n<h3>\u30cf\u30f3\u30c9\u30e9<\/h3>\n<p>Lambda\u306e\u30cf\u30f3\u30c9\u30e9\u5185\u3067\u30b9\u30ad\u30fc\u30de\u53ca\u3073\u30ea\u30be\u30eb\u30d0\u3068\u30af\u30a8\u30ea\u3092\u6e21\u3057\u3066\u51e6\u7406\u3092\u5b9f\u884c\u3059\u308b\u3002<\/p>\n<pre class=\"lang:js decode:true \" >export const handler = async (\r\n  event: any,\r\n  context: lambda.Context,\r\n  callback: lambda.Callback\r\n) =>; {\r\n  \/\/\u30af\u30a8\u30ea\u306e\u5b9f\u884c\r\n  const result = await graphql(buildSchema(typeDefs), event.query, resolvers);\r\n  callback(null, result);\r\n};\r\n<\/pre>\n<p>\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u3092Lambda\u4e0a\u306b\u30c7\u30d7\u30ed\u30a4\u3059\u308c\u3070API\u5074\u306e\u958b\u767a\u306f\u5b8c\u4e86\u3002<\/p>\n<h2><span id=\"i-4\">\u30ea\u30af\u30a8\u30b9\u30c8<\/span><\/h2>\n<p>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5074\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u51e6\u7406\u65b9\u6cd5\u306b\u95a2\u3057\u3066\u306fPOST\u53ca\u3073GET\u3067\u306e\u5bfe\u5fdc\u304c\u53ef\u80fd\u3002<br \/>\n\u305f\u3060\u3057\u3001GET\u306e\u5834\u5408\u306b\u306fAPIGateway\u3067\u306e\u5909\u63db\u304c\u5fc5\u8981\u3068\u306a\u308b\u3002<\/p>\n<h3>POST\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u6295\u3052\u308b\u5834\u5408<\/h3>\n<p>\u4e0b\u8a18\u306e\u3088\u3046\u306bPOST\u30e1\u30bd\u30c3\u30c9\u3067JSON\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u6e21\u3059\u3002<\/p>\n<pre class=\"lang:default decode:true \" >\r\n{\r\n  \"query\": \"{user(id:10){id name age}}\"\r\n}\r\n<\/pre>\n<p>\u4e0b\u8a18\u306e\u3088\u3046\u306a\u5f62\u3067\u30ec\u30b9\u30dd\u30f3\u30b9\u304c\u5e30\u3063\u3066\u304f\u308b <\/p>\n<pre class=\"lang:default decode:true \" >{\r\n  \"data\": {\r\n    \"user\": {\r\n      \"id\": \"10\",\r\n      \"name\": \"test\",\r\n      \"age\": 12\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<h3>GET\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u6295\u3052\u308b\u5834\u5408<\/h3>\n<p>\u524d\u8ff0\u306e\u901a\u308a\u3001APIGateway\u5074\u3067\u306e\u5bfe\u5fdc\u304c\u5fc5\u8981\u3068\u306a\u308b\u3002<br \/>\nGET\u30ea\u30af\u30a8\u30b9\u30c8\u306eURL\u30d1\u30e9\u30e1\u30fc\u30bf\u3092POST\u306e\u6642\u306eJSON\u5f62\u5f0f\u306b\u5909\u63db\u3059\u308b\u3053\u3068\u3067\u5bfe\u5fdc\u304c\u53ef\u80fd\u306b\u306a\u308b\u3002<\/p>\n<h4>\u30e1\u30bd\u30c3\u30c9\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u8ffd\u52a0<\/h4>\n<p>URL\u30af\u30a8\u30ea\u6587\u5b57\u5217\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u4e0b\u8a18\u306e\u3088\u3046\u306bquery\u3068\u3044\u3063\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u8ffd\u52a0\u3059\u308b<br \/>\n<a href=\"http:\/\/168.138.214.208\/wp-content\/uploads\/2020\/01\/sc1-e1578001447357.png\"><img src=\"http:\/\/168.138.214.208\/wp-content\/uploads\/2020\/01\/sc1-300x67.png\" alt=\"\" width=\"300\" height=\"67\" class=\"aligncenter size-medium wp-image-1190\" \/><\/a><\/p>\n<h4>JSON\u30de\u30c3\u30d4\u30f3\u30b0<\/h4>\n<p>\u7d71\u5408\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u4e0b\u8a18\u3092\u8ffd\u52a0\u3059\u308b\u3002<\/p>\n<p>Content-type:application\/json\u306b\u5bfe\u3057\u3066\u4e0b\u8a18\u306e\u5024\u3092\u8a2d\u5b9a\u3059\u308b\u3002<\/p>\n<pre class=\"lang:default decode:true \" >\r\n{\r\n    \"query\": \"$input.params('query')\"\r\n}\r\n<\/pre>\n<p>GET\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5834\u5408\u306f\u3001\u4e0b\u8a18\u306e\u3088\u3046\u306bquery\u30d1\u30e9\u30e1\u30fc\u30bf\u306b\u30c7\u30fc\u30bf\u3092\u6e21\u3059\u3002<br \/>\nhttps:\/\/xxxxxxxx?query={user(id:10){id name age}}<\/p>\n<h2><span id=\"i-5\">\u307e\u3068\u3081<\/span><\/h2>\n<p>AWS Lambda\u3067GrapghQL\u3092\u4f7f\u3063\u305fAPI\u3092\u4f5c\u6210\u3059\u308b\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u305f\u3002<br \/>\nGraphQL\u81ea\u4f53\u306fREST-API\u3068\u6bd4\u8f03\u3059\u308b\u3068\u77e5\u540d\u5ea6\u3067\u306f\u307e\u3060\u307e\u3060\u3060\u304c\u3001\u3053\u308c\u304b\u3089\u5f90\u3005\u306b\u666e\u53ca\u3057\u3066\u3044\u304f\u306e\u3067\u306f\u3068\u671f\u5f85\u3067\u304d\u308b\u305f\u3081\u3001\u3053\u308c\u3092\u671f\u306b\u5b66\u3076\u4e8b\u3082\u5927\u4e8b\u3060\u3068\u601d\u3046\u3002<br \/>\n\u500b\u4eba\u7684\u306b\u306f\u3001\u30aa\u30e9\u30a4\u30ea\u30fc\u306e\u521d\u3081\u3066\u306eGraphQL\u304c\u308f\u304b\u308a\u3084\u3059\u304f\u3001\u5b66\u3076\u306e\u306b\u30aa\u30b9\u30b9\u30e1\u3067\u3042\u308b\u3002<\/p>\n<p><a href=\"https:\/\/www.amazon.co.jp\/\u521d\u3081\u3066\u306eGraphQL-\u2015Web\u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u3063\u3066\u5b66\u3076\u65b0\u4e16\u4ee3API-Eve-Porcello\/dp\/487311893X\">\u30ea\u30f3\u30af<\/a><br \/>\n<a href=\"https:\/\/www.amazon.co.jp\/\u521d\u3081\u3066\u306eGraphQL-\u2015Web\u30b5\u30fc\u30d3\u30b9\u3092\u4f5c\u3063\u3066\u5b66\u3076\u65b0\u4e16\u4ee3API-Eve-Porcello\/dp\/487311893X\"><img src=\"http:\/\/168.138.214.208\/wp-content\/uploads\/2020\/01\/ora1-212x300.jpg\" alt=\"\" width=\"212\" height=\"300\" class=\"aligncenter size-medium wp-image-1198\" srcset=\"https:\/\/nobunobu1717.site\/wp-content\/uploads\/2020\/01\/ora1-212x300.jpg 212w, https:\/\/nobunobu1717.site\/wp-content\/uploads\/2020\/01\/ora1.jpg 352w\" sizes=\"(max-width: 212px) 100vw, 212px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Contents1 \u6982\u89812 \u524d\u63d03 API\u5b9a\u7fa94 \u624b\u98065 \u30ea\u30af\u30a8\u30b9\u30c86 \u307e\u3068\u3081 \u6982\u8981 AWS Lambda\u4e0a\u3067GraphQL\u3092\u4f7f\u7528\u3057\u305fAPI\u3092\u516c\u958b\u3059\u308b\u305f\u3081\u306e\u5b9f\u88c5\u65b9\u6cd5\u306a\u3069\u306e\u7d39\u4ecb\u3002 \u524d\u63d0 \u4e0b\u8a18\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057 &#8230; <\/p>\n","protected":false},"author":1,"featured_media":1170,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[29,22,16],"tags":[],"_links":{"self":[{"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/posts\/1174"}],"collection":[{"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1174"}],"version-history":[{"count":25,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/posts\/1174\/revisions"}],"predecessor-version":[{"id":1201,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/posts\/1174\/revisions\/1201"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=\/wp\/v2\/media\/1170"}],"wp:attachment":[{"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1174"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nobunobu1717.site\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}