{"id":12,"date":"2016-01-29T19:23:48","date_gmt":"2016-01-29T15:23:48","guid":{"rendered":"http:\/\/www.dobryakov.net\/blog\/?p=12"},"modified":"2016-01-29T19:23:48","modified_gmt":"2016-01-29T15:23:48","slug":"key-difference-between-amqp-and-http-in-distributed-web-applications","status":"publish","type":"post","link":"https:\/\/www.dobryakov.net\/blog\/12\/","title":{"rendered":"Key difference between AMQP and HTTP in distributed web applications"},"content":{"rendered":"<p>Even my experienced colleagues don\u2019t understand the basic fundamental difference: AMQP promises you guaranteed delivery (and processing), but HTTP &#8211; don&#8217;t.<\/p>\n<p><em>Disclaimer: I know that there is written \u201cnot guaranteed\u201d in the RabbitMQ documentation. But, Rabbit at least try to do it (and does it very well), while HTTP does not guarantee anything by design.<\/em><\/p>\n<p>Let me remind how HTTP works: the client sends a request, and \u201changs\u201d waiting for response. If you will abort the execution, or disconnect the client from server by any reason &#8211; the answer will be lost forever. Some systems, AFAIK, also will interrupt the processing if client drops the connection.<\/p>\n<p>If the fatal error occurs on server side, we can get the response code (500\/503) as well as get nothing. And we don\u2019t know, had our request be processed completely, or partially, or just died when begin to send response to us, or there was deadlock between two \u201cparallel\u201d requests, or it\u2019s such long by it\u2019s nature, or backend is very busy and we were rejected by balancer, or.. I think you understand me.<!--more--><\/p>\n<p>None of known HTTP-clients, none of AJAX-functions in browsers don\u2019t automatically repeat the same query if previous response was unsuccessfull. This behaviour is right: while we at client side don\u2019t know that happens, the second request could perform unwanted operation (for example, transfer money twice).<\/p>\n<p>In the case of using AMQP (I mean RabbitMQ and suggest it to you) &#8211; you have a \u201cguarantee\u201d that your request is received and will be processed as soon as possible. The \u201cbackend side\u201d does not left client until the message will be persisted to safe storage. It is fast operation without any \u201chighload\u201d, unlike HTTP where the reception of the request is (in most cases) physically coupled with its processing.<\/p>\n<p>Then, the delivery mechanism also guarantees you that if the service (worker) took a message to processing &#8211; and fell, the message will be returned to queue and will be processed by another (or restarted) service instance.<\/p>\n<p>According to the rules of functional programming, each function must have exactly one output, and should not have side effects. The only result of processing the incoming message &#8211; is an outgoing message. If the outgoing message was published &#8211; it is a guarantee that the task was performed.<\/p>\n<p>So, the AMQP protocol means by design that when the service begin to process message &#8211; it does not remove message from queue. It only marks it as busy. If the service fails &#8211; the message will be automatically \u201creleased\u201d. But if the service successfully finish processing, it will publish an outgoing message, and only after this it will destroy incoming message.<\/p>\n<p>Summary: with HTTP you&#8217;re dealing with an absolute anarchy: you do not know what happened there, is the processing complete or not, could you make a second request or not. But with AMQP you are dealing with a clearly structured and guaranteed transitions of life cycle: input, processing, output.<\/p>\n<p>Moreover, it allows you to write code in the \u201clet it crash\u201d style, even on an ordinary PHP, without unnecessary guards and watchdogs because all communication between the components of your application &#8211; are transactional by nature, and are monitored by any convenient monitoring.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Even my experienced colleagues don\u2019t understand the basic fundamental difference: AMQP promises you guaranteed delivery (and processing), but HTTP &#8211; don&#8217;t. Disclaimer: I know that there is written \u201cnot guaranteed\u201d in the RabbitMQ documentation. But, Rabbit at least try to do it (and does it very well), while HTTP does not guarantee anything by design. &hellip; <a href=\"https:\/\/www.dobryakov.net\/blog\/12\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Key difference between AMQP and HTTP in distributed web applications&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[4,16],"class_list":["post-12","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-amqp","tag-queues"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Even my experienced colleagues don\u2019t understand the basic fundamental difference: AMQP promises you guaranteed delivery (and processing), but HTTP - don&#039;t. Disclaimer: I know that there is written \u201cnot guaranteed\u201d in the RabbitMQ documentation. But, Rabbit at least try to do it (and does it very well), while HTTP does not guarantee anything by design.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"dobryakov\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.dobryakov.net\/blog\/12\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Grigoriy Dobryakov - IT+AI Blog - Grigoriy Dobryakov&#039;s blog: management, development and testing\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Key difference between AMQP and HTTP in distributed web applications - Grigoriy Dobryakov - IT+AI Blog\" \/>\n\t\t<meta property=\"og:description\" content=\"Even my experienced colleagues don\u2019t understand the basic fundamental difference: AMQP promises you guaranteed delivery (and processing), but HTTP - don&#039;t. Disclaimer: I know that there is written \u201cnot guaranteed\u201d in the RabbitMQ documentation. But, Rabbit at least try to do it (and does it very well), while HTTP does not guarantee anything by design.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.dobryakov.net\/blog\/12\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2016-01-29T15:23:48+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2016-01-29T15:23:48+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Key difference between AMQP and HTTP in distributed web applications - Grigoriy Dobryakov - IT+AI Blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Even my experienced colleagues don\u2019t understand the basic fundamental difference: AMQP promises you guaranteed delivery (and processing), but HTTP - don&#039;t. Disclaimer: I know that there is written \u201cnot guaranteed\u201d in the RabbitMQ documentation. But, Rabbit at least try to do it (and does it very well), while HTTP does not guarantee anything by design.\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/12\\\/#blogposting\",\"name\":\"Key difference between AMQP and HTTP in distributed web applications - Grigoriy Dobryakov - IT+AI Blog\",\"headline\":\"Key difference between AMQP and HTTP in distributed web applications\",\"author\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/dobryakov\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\"},\"datePublished\":\"2016-01-29T19:23:48+00:00\",\"dateModified\":\"2016-01-29T19:23:48+00:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/12\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/12\\\/#webpage\"},\"articleSection\":\"Uncategorized, amqp, queues\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/12\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/uncategorized\\\/#listItem\",\"name\":\"Uncategorized\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/uncategorized\\\/#listItem\",\"position\":2,\"name\":\"Uncategorized\",\"item\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/uncategorized\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/12\\\/#listItem\",\"name\":\"Key difference between AMQP and HTTP in distributed web applications\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/12\\\/#listItem\",\"position\":3,\"name\":\"Key difference between AMQP and HTTP in distributed web applications\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/category\\\/uncategorized\\\/#listItem\",\"name\":\"Uncategorized\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\",\"name\":\"Grigoriy Dobryakov - IT+AI Blog\",\"description\":\"Grigoriy Dobryakov's blog: management, development and testing\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/dobryakov\\\/#author\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/dobryakov\\\/\",\"name\":\"dobryakov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/12\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/40e48c39391f07d18b3013504096fdb82384a9aecb150c9df6497886ed2803fb?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"dobryakov\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/12\\\/#webpage\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/12\\\/\",\"name\":\"Key difference between AMQP and HTTP in distributed web applications - Grigoriy Dobryakov - IT+AI Blog\",\"description\":\"Even my experienced colleagues don\\u2019t understand the basic fundamental difference: AMQP promises you guaranteed delivery (and processing), but HTTP - don't. Disclaimer: I know that there is written \\u201cnot guaranteed\\u201d in the RabbitMQ documentation. But, Rabbit at least try to do it (and does it very well), while HTTP does not guarantee anything by design.\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/12\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/dobryakov\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/author\\\/dobryakov\\\/#author\"},\"datePublished\":\"2016-01-29T19:23:48+00:00\",\"dateModified\":\"2016-01-29T19:23:48+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/\",\"name\":\"Grigoriy Dobryakov - IT+AI Blog\",\"description\":\"Grigoriy Dobryakov's blog: management, development and testing\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.dobryakov.net\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Key difference between AMQP and HTTP in distributed web applications - Grigoriy Dobryakov - IT+AI Blog","description":"Even my experienced colleagues don\u2019t understand the basic fundamental difference: AMQP promises you guaranteed delivery (and processing), but HTTP - don't. Disclaimer: I know that there is written \u201cnot guaranteed\u201d in the RabbitMQ documentation. But, Rabbit at least try to do it (and does it very well), while HTTP does not guarantee anything by design.","canonical_url":"https:\/\/www.dobryakov.net\/blog\/12\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.dobryakov.net\/blog\/12\/#blogposting","name":"Key difference between AMQP and HTTP in distributed web applications - Grigoriy Dobryakov - IT+AI Blog","headline":"Key difference between AMQP and HTTP in distributed web applications","author":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/dobryakov\/#author"},"publisher":{"@id":"https:\/\/www.dobryakov.net\/blog\/#organization"},"datePublished":"2016-01-29T19:23:48+00:00","dateModified":"2016-01-29T19:23:48+00:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/www.dobryakov.net\/blog\/12\/#webpage"},"isPartOf":{"@id":"https:\/\/www.dobryakov.net\/blog\/12\/#webpage"},"articleSection":"Uncategorized, amqp, queues"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dobryakov.net\/blog\/12\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.dobryakov.net\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/uncategorized\/#listItem","name":"Uncategorized"}},{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/uncategorized\/#listItem","position":2,"name":"Uncategorized","item":"https:\/\/www.dobryakov.net\/blog\/category\/uncategorized\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/12\/#listItem","name":"Key difference between AMQP and HTTP in distributed web applications"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/12\/#listItem","position":3,"name":"Key difference between AMQP and HTTP in distributed web applications","previousItem":{"@type":"ListItem","@id":"https:\/\/www.dobryakov.net\/blog\/category\/uncategorized\/#listItem","name":"Uncategorized"}}]},{"@type":"Organization","@id":"https:\/\/www.dobryakov.net\/blog\/#organization","name":"Grigoriy Dobryakov - IT+AI Blog","description":"Grigoriy Dobryakov's blog: management, development and testing","url":"https:\/\/www.dobryakov.net\/blog\/"},{"@type":"Person","@id":"https:\/\/www.dobryakov.net\/blog\/author\/dobryakov\/#author","url":"https:\/\/www.dobryakov.net\/blog\/author\/dobryakov\/","name":"dobryakov","image":{"@type":"ImageObject","@id":"https:\/\/www.dobryakov.net\/blog\/12\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/40e48c39391f07d18b3013504096fdb82384a9aecb150c9df6497886ed2803fb?s=96&d=mm&r=g","width":96,"height":96,"caption":"dobryakov"}},{"@type":"WebPage","@id":"https:\/\/www.dobryakov.net\/blog\/12\/#webpage","url":"https:\/\/www.dobryakov.net\/blog\/12\/","name":"Key difference between AMQP and HTTP in distributed web applications - Grigoriy Dobryakov - IT+AI Blog","description":"Even my experienced colleagues don\u2019t understand the basic fundamental difference: AMQP promises you guaranteed delivery (and processing), but HTTP - don't. Disclaimer: I know that there is written \u201cnot guaranteed\u201d in the RabbitMQ documentation. But, Rabbit at least try to do it (and does it very well), while HTTP does not guarantee anything by design.","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.dobryakov.net\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.dobryakov.net\/blog\/12\/#breadcrumblist"},"author":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/dobryakov\/#author"},"creator":{"@id":"https:\/\/www.dobryakov.net\/blog\/author\/dobryakov\/#author"},"datePublished":"2016-01-29T19:23:48+00:00","dateModified":"2016-01-29T19:23:48+00:00"},{"@type":"WebSite","@id":"https:\/\/www.dobryakov.net\/blog\/#website","url":"https:\/\/www.dobryakov.net\/blog\/","name":"Grigoriy Dobryakov - IT+AI Blog","description":"Grigoriy Dobryakov's blog: management, development and testing","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.dobryakov.net\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Grigoriy Dobryakov - IT+AI Blog - Grigoriy Dobryakov's blog: management, development and testing","og:type":"article","og:title":"Key difference between AMQP and HTTP in distributed web applications - Grigoriy Dobryakov - IT+AI Blog","og:description":"Even my experienced colleagues don\u2019t understand the basic fundamental difference: AMQP promises you guaranteed delivery (and processing), but HTTP - don't. Disclaimer: I know that there is written \u201cnot guaranteed\u201d in the RabbitMQ documentation. But, Rabbit at least try to do it (and does it very well), while HTTP does not guarantee anything by design.","og:url":"https:\/\/www.dobryakov.net\/blog\/12\/","article:published_time":"2016-01-29T15:23:48+00:00","article:modified_time":"2016-01-29T15:23:48+00:00","twitter:card":"summary_large_image","twitter:title":"Key difference between AMQP and HTTP in distributed web applications - Grigoriy Dobryakov - IT+AI Blog","twitter:description":"Even my experienced colleagues don\u2019t understand the basic fundamental difference: AMQP promises you guaranteed delivery (and processing), but HTTP - don't. Disclaimer: I know that there is written \u201cnot guaranteed\u201d in the RabbitMQ documentation. But, Rabbit at least try to do it (and does it very well), while HTTP does not guarantee anything by design."},"aioseo_meta_data":{"post_id":"12","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_custom_url":null,"og_image_custom_fields":null,"og_image_url":null,"og_image_width":null,"og_image_height":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_image_url":null,"twitter_title":null,"twitter_description":null,"schema_type":"default","schema_type_options":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null,"created":"2026-07-26 15:21:42","updated":"2026-07-26 15:21:42"},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.dobryakov.net\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/www.dobryakov.net\/blog\/category\/uncategorized\/\" title=\"Uncategorized\">Uncategorized<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tKey difference between AMQP and HTTP in distributed web applications\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.dobryakov.net\/blog"},{"label":"Uncategorized","link":"https:\/\/www.dobryakov.net\/blog\/category\/uncategorized\/"},{"label":"Key difference between AMQP and HTTP in distributed web applications","link":"https:\/\/www.dobryakov.net\/blog\/12\/"}],"_links":{"self":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts\/12","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/comments?post=12"}],"version-history":[{"count":0,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/posts\/12\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/media?parent=12"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/categories?post=12"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dobryakov.net\/blog\/wp-json\/wp\/v2\/tags?post=12"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}