{"id":5393,"date":"2026-04-17T21:20:34","date_gmt":"2026-04-17T12:20:34","guid":{"rendered":"https:\/\/www.freelifemakers.org\/wordpress\/?p=5393"},"modified":"2026-04-17T21:25:30","modified_gmt":"2026-04-17T12:25:30","slug":"webserver-httplib-webserver-load-balancer","status":"publish","type":"post","link":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/2026\/04\/17\/webserver-httplib-webserver-load-balancer\/","title":{"rendered":"[Webserver]httplib webserver+Load Balancer(Round Robin)"},"content":{"rendered":"\n<p>\ud83d\udc49\ud83c\udffb \ub85c\ub4dc \ubc38\ub7f0\uc11c\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158(\uc6f9 \uc11c\ube44\uc2a4 \ub4f1)\uc758 \uc694\uccad\uc744 \uc5ec\ub7ec \uc11c\ubc84\ub85c \ubd84\uc0b0(\ub85c\ub4dc \ubc38\ub7f0\uc2f1)\ud558\uc5ec, \ud2b9\uc815 \uc11c\ubc84\uc5d0 \ubd80\ud558\uac00 \uc9d1\uc911\ub418\uc9c0 \uc54a\ub3c4\ub85d \ud558\uace0 \uac00\uc6a9\uc131\uacfc \uc548\uc815\uc131\uc744 \ub192\uc774\ub294 \uc7a5\uce58 \ub610\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4\uc785\ub2c8\ub2e4.<br>A load balancer is a device or software that distributes requests from applications (such as web services) across multiple servers (load balancing) to prevent the load from being concentrated on a specific server and to increase availability and stability.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ub85c\ub4dc\ubc38\ub7f0\uc2f1\uc758 \ubc29\ubc95\uc740 \uc5ec\ub7ec\uac00\uc9c0\uac00 \uc788\uc9c0\ub9cc \uc5ec\uae30\uc11c\ub294 \uc694\uccad\uc744 \uc21c\ucc28\uc801\uc73c\ub85c \uc5ec\ub7ec \uc11c\ubc84\uc5d0 \ubd84\ubc30\ud558\ub294 \ub77c\uc6b4\ub4dc \ub85c\ube48\ubc29\uc2dd\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4.<br>There are various load balancing methods, but here we implement the Round Robin method, which distributes requests sequentially to multiple servers.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \uc989 \ub85c\ub4dc\ubc38\ub7f0\uc11c\uc640 \uc5ec\ub7ec\uac1c\uc758 \uc6f9\uc11c\ubc84\uc5d0 \ub3d9\uc77c\ud55c \uc6f9\uc0ac\uc774\ud2b8\ub97c \ub9cc\ub4e4\uc5b4\uc11c  \uc2e4\ud589\ud574\ub193\uace0 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc811\uc18d\ud558\uba74 \ub85c\ub4dc\ubc38\ub7f0\uc11c\uac00 \uc5b4\ub5a4 \uc6f9\uc11c\ubc84\uc5d0 \uc811\uc18d\ud560\uc9c0 \uacb0\uc815\ud574\uc11c \uc811\uc18d\ud558\ub3c4\ub85d \ub3c4\uc640 \uc90d\ub2c8\ub2e4.<br>In other words, the same website is created and run on multiple web servers along with a load balancer, and when a client connects, the load balancer determines which web server to connect to and assists in the connection.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \uc544\ub798\ub294 \uc811\uc18d\ud655\uc778\uc744 \uc704\ud574\uc11c \uc6f9\uc11c\ubc84 \ud654\uba74\uc5d0 \uac01 \uad6c\ubd84 \uba54\uc138\uc9c0\uac00 \ucd94\uac00\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.<br>Below, each distinction message has been added to the web server screen to verify the connection.<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ud130\ubbf8\ub110\uc5d0 \ucd1d 4\uac1c\uc758 \uc11c\ubc84\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.<br>Run a total of 4 servers in the terminal.<\/p>\n\n\n\n<p>\u2714\ufe0f \ub85c\ub4dc\ubc38\ub7f0\uc11c 1\uac1c,\uc6f9\uc11c\ubc84\uc6a9 3\uac1c<br>1 load balancer, 3 for web servers<\/p>\n\n\n\n<p>\ud83d\udc49\ud83c\udffbhttplib.h(0.42.0) \ub2e4\uc6b4\ub85c\ub4dc \/ download<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -L https:\/\/raw.githubusercontent.com\/yhirose\/cpp-httplib\/master\/httplib.h -o httplib.h<\/code><\/pre>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ub85c\ub4dc\ubc38\ub7f0\uc11c \/ Load Balancer<\/p>\n\n\n\n<p>\u2714\ufe0f \ucf54\ub4dc \/ code<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"httplib.h\"\n#include &lt;atomic&gt;\n#include &lt;iostream&gt;\n#include &lt;string&gt;\n#include &lt;vector&gt;\n\nstruct Backend {\n    std::string host;\n    int port;\n};\n\nstatic void copy_response(const httplib::Result&amp; r, httplib::Response&amp; res) {\n    if (!r) {\n        res.status = 502;\n        res.set_content(\"Bad Gateway\", \"text\/plain; charset=utf-8\");\n        return;\n    }\n\n    res.status = r-&gt;status;\n    for (const auto&amp; h : r-&gt;headers) {\n  \n        if (h.first == \"Connection\" || h.first == \"Keep-Alive\" ||\n            h.first == \"Proxy-Authenticate\" || h.first == \"Proxy-Authorization\" ||\n            h.first == \"TE\" || h.first == \"Trailers\" ||\n            h.first == \"Transfer-Encoding\" || h.first == \"Upgrade\") {\n            continue;\n        }\n        res.set_header(h.first.c_str(), h.second.c_str());\n    }\n    res.body = r-&gt;body;\n}\n\nint main() {\n    httplib::Server lb;\n\n    std::vector&lt;Backend&gt; backends = {\n        {\"127.0.0.1\", 3001},\n        {\"127.0.0.1\", 3002},\n        {\"127.0.0.1\", 3003}\n    };\n\n    std::atomic&lt;size_t&gt; rr{0};\n\n    auto next_backend = &#91;&amp;]() -&gt; Backend {\n        size_t idx = rr.fetch_add(1, std::memory_order_relaxed) % backends.size();\n        return backends&#91;idx];\n    };\n\n    auto proxy = &#91;&amp;](const httplib::Request&amp; req, httplib::Response&amp; res) {\n        Backend b = next_backend();\n        httplib::Client cli(b.host, b.port);\n\n        httplib::Headers headers = req.headers;\n        headers.erase(\"Host\");\n\n        std::cout &lt;&lt; \"&#91;LB] \" &lt;&lt; req.method &lt;&lt; \" \" &lt;&lt; req.path\n                  &lt;&lt; \" -&gt; \" &lt;&lt; b.host &lt;&lt; \":\" &lt;&lt; b.port &lt;&lt; \"\\n\";\n\n        if (req.method == \"GET\") {\n            copy_response(cli.Get(req.path.c_str(), headers), res);\n        } else if (req.method == \"POST\") {\n            copy_response(cli.Post(req.path.c_str(), headers, req.body,\n                                   req.get_header_value(\"Content-Type\").c_str()), res);\n        } else if (req.method == \"PUT\") {\n            copy_response(cli.Put(req.path.c_str(), headers, req.body,\n                                  req.get_header_value(\"Content-Type\").c_str()), res);\n        } else if (req.method == \"PATCH\") {\n            copy_response(cli.Patch(req.path.c_str(), headers, req.body,\n                                    req.get_header_value(\"Content-Type\").c_str()), res);\n        } else if (req.method == \"DELETE\") {\n            copy_response(cli.Delete(req.path.c_str(), headers, req.body,\n                                     req.get_header_value(\"Content-Type\").c_str()), res);\n        } else {\n            res.status = 405;\n            res.set_content(\"Method Not Allowed\", \"text\/plain; charset=utf-8\");\n        }\n    };\n\n    lb.Get(R\"(.*)\", proxy);\n    lb.Post(R\"(.*)\", proxy);\n    lb.Put(R\"(.*)\", proxy);\n    lb.Patch(R\"(.*)\", proxy);\n    lb.Delete(R\"(.*)\", proxy);\n\n    std::cout &lt;&lt; \"Round-robin LB listening on http:\/\/0.0.0.0:5080\\n\";\n    lb.listen(\"0.0.0.0\", 5080);\n}\n<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f \ub85c\ub4dc\ubc38\ub7f0\uc11c \ucef4\ud30c\uc77c \/ Load Balancer Compiling<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>g++ lb_server.cpp -o lb_server -std=c++17 -pthread<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f \uc2e4\ud589 \/ Run<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/lb_server<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"167\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/lbserver-jpg-1024x167.jpg\" alt=\"\" class=\"wp-image-5397\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/lbserver-jpg-1024x167.jpg 1024w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/lbserver-jpg-300x49.jpg 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/lbserver-jpg-768x125.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/lbserver-jpg-400x65.jpg 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/lbserver-jpg-800x130.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/lbserver-jpg.jpg 1230w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Load Balancer<\/figcaption><\/figure>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ud0c0\uac9f \uc6f9\uc11c\ubc84 \/ Target Webserver<\/p>\n\n\n\n<p>\u2714\ufe0f \ucf54\ub4dc \/ Code<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include \"httplib.h\"\n#include &lt;atomic&gt;\n#include &lt;iostream&gt;\n#include &lt;string&gt;\n\nint main(int argc, char* argv&#91;]) {\n    if (argc &lt; 3) {\n        std::cerr &lt;&lt; \"usage: .\/target_server &lt;server_id&gt; &lt;port&gt;\\n\";\n        return 1;\n    }\n\n    const std::string server_id = argv&#91;1];\n    const int port = std::stoi(argv&#91;2]);\n\n    httplib::Server svr;\n    std::atomic&lt;unsigned long long&gt; hit{0};\n\n    svr.Get(\"\/\", &#91;&amp;](const httplib::Request&amp;, httplib::Response&amp; res) {\n        auto n = ++hit;\n        std::string html =\n            \"&lt;!doctype html&gt;&lt;html&gt;&lt;head&gt;&lt;meta charset='utf-8'&gt;&lt;title&gt;Target&lt;\/title&gt;&lt;\/head&gt;&lt;body&gt;\"\n            \"&lt;h1&gt;Target Server: \" + server_id + \"&lt;\/h1&gt;\"\n            \"&lt;p&gt;Port: \" + std::to_string(port) + \"&lt;\/p&gt;\"\n            \"&lt;p&gt;Hit Count: \" + std::to_string(n) + \"&lt;\/p&gt;\"\n            \"&lt;p&gt;\ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uc0c8\ub85c\uace0\uce68\ud558\uba74 LB\uac00 \ub2e4\ub978 \uc11c\ubc84\ub85c \ubcf4\ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4.&lt;\/p&gt;\"\n            \"&lt;p&gt;If you refresh the browser, the LB may send it to a different server.&lt;\/p&gt;\"\n            \"&lt;\/body&gt;&lt;\/html&gt;\";\n\n        res.set_content(html, \"text\/html; charset=utf-8\");\n    });\n\n    std::cout &lt;&lt; \"target \" &lt;&lt; server_id &lt;&lt; \" listening on http:\/\/0.0.0.0:\" &lt;&lt; port &lt;&lt; \"\\n\";\n    svr.listen(\"0.0.0.0\", port);\n}\n<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f \uc6f9\uc11c\ubc84 \ucef4\ud30c\uc77c \/ Webserver Compiling<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>g++ target_server.cpp -o target_server -std=c++17 -pthread<\/code><\/pre>\n\n\n\n<p>\u2714\ufe0f \uc2e4\ud589 \/ Run<\/p>\n\n\n\n<p>&#8212; \ud130\ubbf8\ub110\uc744 3\uac1c \uc2e4\ud589\ud574\uc11c \uac01 \uc11c\ubc84\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.<br>Run three terminals and run each server.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/target_server A 3001\n.\/target_server B 3002\n.\/target_server C 3003<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"389\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/targetserver-jpg-1024x389.jpg\" alt=\"\" class=\"wp-image-5399\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/targetserver-jpg-1024x389.jpg 1024w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/targetserver-jpg-300x114.jpg 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/targetserver-jpg-768x292.jpg 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/targetserver-jpg-400x152.jpg 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/targetserver-jpg-800x304.jpg 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/targetserver-jpg.jpg 1432w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Webserver<\/figcaption><\/figure>\n\n\n\n<p>\ud83d\udc49\ud83c\udffb \ube0c\ub77c\uc6b0\uc800 \uc811\uc18d \/ Browser access<\/p>\n\n\n\n<p>\u2714\ufe0fhttp:\/\/localhost:5080\uc73c\ub85c\uc811\uc18d\ud569\ub2c8\ub2e4.<br>Connect to http:\/\/localhost:5080.<\/p>\n\n\n\n<p>\u2714\ufe0f \ube0c\ub77c\uc6b0\uc800\ub97c \uc0c8\ub85c\uace0\uce68\ud558\uba74 \uc544\ub798\ucc98\ub7fc \ub2e4\ub978 \uc11c\ubc84\ub85c \uc811\uc18d\ub418\ub294\uac83\uc744 \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br>If you refresh the browser, you can confirm that it connects to a different server as shown below.<\/p>\n\n\n\n<p>\u2b50\ufe0f hit count\ub294&nbsp;<strong>\uadf8 \ud0c0\uac9f \uc11c\ubc84 \ud504\ub85c\uc138\uc2a4 \ud558\ub098 \uae30\uc900 \uc811\uc18d \ud69f\uc218<\/strong>\uc785\ub2c8\ub2e4.<br>The hit count is the number of connections per target server process.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"962\" height=\"642\" data-id=\"5403\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/3-a.png\" alt=\"\" class=\"wp-image-5403\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/3-a.png 962w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/3-a-300x200.png 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/3-a-768x513.png 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/3-a-400x267.png 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/3-a-800x534.png 800w\" sizes=\"auto, (max-width: 962px) 100vw, 962px\" \/><figcaption class=\"wp-element-caption\">3001<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"640\" data-id=\"5401\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-b-1024x640.png\" alt=\"\" class=\"wp-image-5401\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-b-1024x640.png 1024w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-b-300x188.png 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-b-768x480.png 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-b-400x250.png 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-b-800x500.png 800w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-b.png 1036w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">3002<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"984\" height=\"644\" data-id=\"5402\" src=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-c.png\" alt=\"\" class=\"wp-image-5402\" srcset=\"https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-c.png 984w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-c-300x196.png 300w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-c-768x503.png 768w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-c-400x262.png 400w, https:\/\/www.freelifemakers.org\/wordpress\/wp-content\/uploads\/2026\/04\/1-c-800x524.png 800w\" sizes=\"auto, (max-width: 984px) 100vw, 984px\" \/><figcaption class=\"wp-element-caption\">3003<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83d\udc49\ud83c\udffb \ub85c\ub4dc \ubc38\ub7f0\uc11c\ub294 \uc560\ud50c\ub9ac\ucf00\uc774\uc158(\uc6f9 \uc11c\ube44\uc2a4 \ub4f1)\uc758 \uc694\uccad\uc744 \uc5ec\ub7ec \uc11c\ubc84\ub85c \ubd84\uc0b0(\ub85c\ub4dc \ubc38\ub7f0\uc2f1)\ud558\uc5ec, \ud2b9\uc815 \uc11c\ubc84\uc5d0 \ubd80\ud558\uac00 \uc9d1\uc911\ub418\uc9c0 \uc54a\ub3c4\ub85d \ud558\uace0 \uac00\uc6a9\uc131\uacfc \uc548\uc815\uc131\uc744 \ub192\uc774\ub294 \uc7a5\uce58 \ub610\ub294 \uc18c\ud504\ud2b8\uc6e8\uc5b4\uc785\ub2c8\ub2e4.A load balancer is a device or software that distributes requests from applications (such as web services) across multiple servers (load balancing) to prevent the load from being concentrated on a specific server [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23,1],"tags":[],"class_list":["post-5393","post","type-post","status-publish","format-standard","hentry","category-cpp","category-uncategorized","missing-thumbnail"],"_links":{"self":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/5393","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=5393"}],"version-history":[{"count":7,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/5393\/revisions"}],"predecessor-version":[{"id":5405,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/5393\/revisions\/5405"}],"wp:attachment":[{"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=5393"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=5393"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.freelifemakers.org\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=5393"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}