{"id":8081,"date":"2017-01-06T19:16:16","date_gmt":"2017-01-06T19:16:16","guid":{"rendered":"http:\/\/www.abstracta.us\/?p=8081"},"modified":"2025-05-05T21:21:01","modified_gmt":"2025-05-05T21:21:01","slug":"gatling-vs-jmeter-findings","status":"publish","type":"post","link":"https:\/\/abstracta.us\/blog\/performance-testing\/gatling-vs-jmeter-findings\/","title":{"rendered":"Gatling vs JMeter: Our Findings"},"content":{"rendered":"<p><!-- Go to www.addthis.com\/dashboard to customize your tools --><script src=\"\/\/s7.addthis.com\/js\/300\/addthis_widget.js#pubid=ra-58d80a50fc4f926d\" type=\"text\/javascript\"><\/script><\/p>\n<h1><\/h1>\n<h1><span style=\"font-weight: 400; color: #333333;\">All things equal, how do these two open source load testing tools measure up?<\/span><\/h1>\n<p><span style=\"font-weight: 400; color: #333333;\">In this post, we share our results from the experiment conducted by Abstracta\u2019s own, Santiago Peraza and Pablo Barcel\u00f3, in which the objective was to make a comparative benchmark between <a href=\"http:\/\/gatling.io\/\" target=\"_blank\" rel=\"noopener\">Gatling<\/a><\/span> and <span style=\"color: #00b674;\"><a href=\"http:\/\/jmeter.apache.org\/\" target=\"_blank\" rel=\"noopener\">JMeter<\/a><\/span> tools, in versions 2.2.2 and 3.0 respectively.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Aim_of_the_Experiment\"><\/span><strong><span style=\"color: #00b674;\">Aim of the Experiment<\/span><\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400; color: #333333;\">We wanted to answer these questions:<\/span><\/p>\n<p><span style=\"font-weight: 400; color: #333333;\">1. What is the maximum amount of threads I can run with each of the tools before I start getting errors or saturating some basic resource?<\/span><\/p>\n<p><span style=\"font-weight: 400; color: #333333;\">2. Given the same load generated by both tools, is there a significantly different resource use?<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Test_Configuration\"><\/span>Test Configuration<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400; color: #333333;\">The experiment had only one variable: the tool. The rest we kept the same: infrastructure, test, load scenario, system under test, network, etc.<\/span><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Infrastructure_for_the_Test\"><\/span>Infrastructure for the Test<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400; color: #333333;\"> To carry out the test, we decided that the best option was to use two machines, both connected to the same router through two Ethernet connection cables and generate load by making requests from one to the other. For that, we installed in one of the PCs (Laptop A) the Microsoft IIS software, which converts one PC into a web server, and we used the other PC (Laptop B) as a load generator. The laptops had 6GB of RAM and an Intel Core i5-5200U of 2.20GHz with 2 cores and 4 threads per core.<\/span><\/p>\n<h2><span style=\"color: #333333;\"><img decoding=\"async\" class=\"aligncenter wp-image-8106 size-full\" src=\"http:\/\/www.abstracta.us\/wp-content\/uploads\/2017\/01\/diagrama-benchmark-gatling-y-jmeter-1-min-1.png\" alt=\"test infrastructure gatling vs jmeter\" width=\"2396\" height=\"1464\" \/><\/span><\/h2>\n<h2><span class=\"ez-toc-section\" id=\"Configuration_Considerations\"><\/span>Configuration Considerations<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400; color: #333333;\">To make the comparison as fair as possible, it was necessary to take into account some factors that may affect performance, such as secondary orders, cookies and cache. Gatling handles cookies and cache by default; but that is not so in the case of JMeter. Therefore, it was necessary to configure the tools in the same way to avoid biased results.<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400; color: #333333;\">Cache: At the moment of defining the test you can choose to use the cache management (in that case it is necessary to add an element of the type HTTP Cache Manager in JMeter) or without handling the cache (in this case it is necessary to disable the handling of cache by Gatling, adding the disableCaching line in the HTTP protocol configuration). In our case, we chose to disable the handling of the cache in Gatling in order to generate a greater load during the tests.<\/span><\/li>\n<li><span style=\"font-weight: 400; color: #333333;\">Secondary requests: Both Gatling and JMeter do not invoke the default secondary requests, so in the Gatling script we included the inferHtmlResources line, and in JMeter we enabled the Retrieve All Embedded Resources option of the HTTP Request.<\/span><\/li>\n<li><span style=\"font-weight: 400; color: #333333;\">Cookies: Keeping in mind that we made the requests on a static website, it was not necessary to take into account the handling of the cookies.<\/span><\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Test_Scenario\"><\/span>Test Scenario<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400; color: #333333;\">We prepared the following scenario in both tools:<\/span><\/p>\n<ul>\n<li><span style=\"font-weight: 400; color: #333333;\">Incremental number of virtual concurrent users, using a one-minute ramp-up on all executions.<\/span><\/li>\n<li><span style=\"font-weight: 400; color: #333333;\">Endless and constant iterations for the duration of the test<\/span><\/li>\n<li><span style=\"font-weight: 400; color: #333333;\">Test duration: 5 minutes<\/span><\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Test_Scripts_in_Gatling_and_JMeter\"><\/span>Test Scripts in Gatling and JMeter<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400; color: #333333;\">The scripts were very simple and both did the same thing.<\/span><\/p>\n<h2><span style=\"color: #333333;\"><img decoding=\"async\" class=\"aligncenter wp-image-8090 size-full\" src=\"http:\/\/www.abstracta.us\/wp-content\/uploads\/2017\/01\/gatling-test-benchmark-min.png\" alt=\"gatling-test-benchmark-min\" width=\"937\" height=\"573\" \/><\/span><\/h2>\n<h2><span style=\"color: #333333;\"><img decoding=\"async\" class=\"aligncenter wp-image-8091\" src=\"http:\/\/www.abstracta.us\/wp-content\/uploads\/2017\/01\/jMeter-Script-benchmark-min-300x142.png\" alt=\"jMeter-Script-benchmark-min\" width=\"900\" height=\"427\" \/><\/span><\/h2>\n<h2><span class=\"ez-toc-section\" id=\"Results\"><\/span>Results<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"1_%E2%80%93_Different_Handling_of_Connections_Threads\"><\/span><strong><span style=\"color: #333399;\">#1 \u2013 Different Handling of Connections &amp; Threads<\/span><\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400; color: #333333;\">The first result was that JMeter handled connections differently, which made it necessary to make an adjustment at the operating system level in order to reach the same number of concurrent virtual users.<\/span><\/p>\n<h4>Connections<\/h4>\n<p><span style=\"font-weight: 400; color: #333333;\">In a first instance with JMeter simulating 400 users we observed connection errors (Non HTTP response code: java.net.BindException). These errors are caused by limits at the operating system level. In particular we were using Windows, where TCP \/ IP connections use the ports 1024-5000 output, so if many connections are generated in a short time, these ports become saturated. To avoid this problem, you must increase the number of ports available for connections by following the steps described on this <span style=\"color: #00b674;\"><a href=\"http:\/\/www.baselogic.com\/blog\/solved-java-net-bindexception-address-use-connect-issue-windows\/\" target=\"_blank\" rel=\"noopener\">page<\/a><\/span>.<\/span><\/p>\n<p><span style=\"font-weight: 400; color: #333333;\">In turn, using Gatling, we managed to run tests with up to 4,000 concurrent virtual users without encountering this problem.\u00a0<\/span><span style=\"font-weight: 400; color: #333333;\">In order to find an explanation for why this limitation is present in one tool and not in the other, we did some further investigating, arriving at the hypothesis that the explanation is in how these tools handle connections:<\/span><\/p>\n<p><span style=\"font-weight: 400; color: #333333;\"><strong style=\"color: #333333;\">Gatling:<\/strong> According to what I understand of what is <span style=\"color: #00b674;\"><a href=\"http:\/\/stackoverflow.com\/questions\/34987476\/gatling-repeat-with-connection-re-use\" target=\"_blank\" rel=\"noopener\">explained here<\/a><\/span>, Gatling handles a pool of connections per virtual user, but the important thing is that in the sequential requests, it reuses connections by default.<\/span><\/p>\n<p><span style=\"font-weight: 400; color: #333333;\"><strong style=\"color: #333333;\">JMeter:<\/strong> According to what is <span style=\"color: #00b674;\"><a href=\"http:\/\/stackoverflow.com\/questions\/14194783\/apache-multiple-requests-with-jmeter\" target=\"_blank\" rel=\"noopener\">discussed here<\/a><\/span>, JMeter does not. Additionally, the <span style=\"color: #00b674;\"><a href=\"http:\/\/jmeter.apache.org\/usermanual\/component_reference.html\">JMeter documentation<\/a><\/span> mentions: <em>There is no control over how connections are reused. When a connection is released by JMeter, it may or may not be reused by the same thread.<\/em><\/span><\/p>\n<h4><strong><span style=\"color: #333333;\">Threads<\/span><\/strong><\/h4>\n<p><span style=\"font-weight: 400; color: #333333;\">Related to the above, there is another interesting aspect that differentiates how each tool works with respect to the management of virtual users. In the case of JMeter, we have processes that make synchronous requests, and Gatling handles an asynchronous process through the use of handlers. This <a href=\"https:\/\/octoperf.com\/blog\/2015\/06\/08\/jmeter-vs-gatling\/\" target=\"_blank\" rel=\"noopener\">OctoPerf article<\/a><\/span> explains the differences quite clearly. Both have the possibility to manage a pool of connections per user, which in the case of having several secondary orders, (something that didn&#8217;t happen in our experiment), they are done in parallel as the browsers usually do. In Gatling this is the default configuration, with a maximum of 6 simultaneous connections, in JMeter you have to specify it.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"2_%E2%80%93_The_Amount_of_Load_in_Which_We_See_Failures_in_the_Results_is_Similar\"><\/span>#2 \u2013 The Amount of Load in Which We See Failures in the Results is Similar<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400; color: #333333;\">As we did not try to split hairs, we did not look for the<em> exact<\/em> amount of users before which it is saturated, the order is the same, there is no significant difference. With both tools, the load of 4,000 virtual users was generated, where we began to see that the HTTP requests failed, which indicated that the results can not be trusted. This actually happened due to saturation as much as on the generator side as the server side, but by looking at the resources, the main saturation was observed on the laptop where the load generator was running.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"3_%E2%80%93_Number_of_Users_That_Each_Tool_Can_Generate_Without_Saturating_the_CPU\"><\/span><strong><span style=\"color: #333399;\">#3 \u2013 Number of Users That Each Tool Can Generate Without Saturating the CPU<\/span><\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400; color: #333333;\">Although it seems absurd, the maximum number of virtual users that can be generated without reaching 100% CPU of the machine with which the load is generated is 4. This is the same with both tools, and running 5 concurrently \u201ceats up\u201d 100% of the CPU during the whole test.<\/span><\/p>\n<p><span style=\"font-weight: 400; color: #333333;\">This is explained by the fact that they are requests one after another, without pauses between each and the responses are almost immediate, whereby each thread is constantly working. I expected a very different result in this regard, but that was how it turned out.<\/span><\/p>\n<h3><span class=\"ez-toc-section\" id=\"4_%E2%80%93_Faced_with_a_Different_Load_of_4000_Virtual_Users_There_Was_a_Different_Use_of_Resources\"><\/span>#4 \u2013 Faced with a Different Load of 4,000 Virtual Users, There Was a Different Use of Resources<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><span style=\"font-weight: 400; color: #333333;\">Let&#8217;s look at the basic monitoring graphs produced on the laptop of the load generator to analyze the differences. First, the execution of JMeter marked in red:<img decoding=\"async\" class=\"aligncenter wp-image-8089 size-full\" src=\"http:\/\/www.abstracta.us\/wp-content\/uploads\/2017\/01\/monitoring-4000-vu-JMeter-min.png\" alt=\"monitoring-4000-vu-JMeter-min\" width=\"668\" height=\"435\" \/><\/span><\/p>\n<p><span style=\"font-weight: 400; color: #333333;\">Then the execution with Gatling marked in red:<br \/>\n<img decoding=\"async\" class=\"aligncenter wp-image-8088 size-full\" src=\"http:\/\/www.abstracta.us\/wp-content\/uploads\/2017\/01\/monitoring-4000-vu-Gatling-min.png\" alt=\"monitoring-4000-vu-Gatling-min\" width=\"668\" height=\"435\" \/><\/span><\/p>\n<h4>Observations<\/h4>\n<ul>\n<li><span style=\"font-weight: 400; color: #333333;\">Although both were using 100% of the CPU, in the case of JMeter there was a greater use of CPU by the system, which could be due to it having more threads to handle the virtual users.<\/span><\/li>\n<li><span style=\"font-weight: 400; color: #333333;\">Gatling uses less memory than JMeter. You can see in the graph that JMeter uses almost 100%, or almost 6GB, and Gatling uses a little more than 4GB, or about 30% less. This could also be explained by the handling of threads, since Gatling needs fewer threads in memory than JMeter for the same number of virtual users.<\/span><\/li>\n<li><span style=\"font-weight: 400; color: #333333;\">Gatling seems to use more network, which would not make sense unless it generated more load. If JMeter generated less load, it is because it was more saturated and perhaps it could not execute with the same intensity as Gatling.<\/span><\/li>\n<li><span style=\"font-weight: 400; color: #333333;\">Gatling used less disk than JMeter, and the curious thing is that the majority in JMeter are readings. Here we are lacking a little more analysis to see what is the reason for this difference, but since it doesn\u2019t mean it\u2019s a bottleneck, we did not find it too important.<\/span><\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"In_Closing\"><\/span>In Closing<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><span style=\"font-weight: 400; color: #333333;\">In conclusion, while there is not much difference between the load supported by Gatling and JMeter, the latter requires extra initial configuration and also uses about 30% more RAM than Gatling.<\/span><\/p>\n<p><span style=\"font-weight: 400; color: #333333;\">Do you have any similar experience with the tools to share?<\/span><\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<h2><span class=\"ez-toc-section\" id=\"Recommended_for_You\"><\/span><strong>Recommended for You<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><a href=\"http:\/\/abstracta.us\/blog\/performance-testing\/gatling-tool-review-performance-tests-written-scala\/\"><span style=\"font-weight: 400;\">Gatling Tool Review for Performance Tests (written in Scala)<\/span><\/a><br \/>\n<a href=\"http:\/\/abstracta.us\/blog\/performance-testing\/why-performance-testing-is-necessary\/\"><span style=\"font-weight: 400;\">Why Performance Testing is Necessary<\/span><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>All things equal, how do these two open source load testing tools measure up? In this post, we share our results from the experiment conducted by Abstracta\u2019s own, Santiago Peraza and Pablo Barcel\u00f3, in which the objective was to make a comparative benchmark between Gatling&#8230;<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[32,61],"tags":[102,87,50,37],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v14.0.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Open Source Gatling vs JMeter: Our Findings | Abstracta<\/title>\n<meta name=\"description\" content=\"We wanted to know: all things equal, how do these two open source load testing tools measure up? Read about our Gatling vs JMeter experiment.\" \/>\n<meta name=\"robots\" content=\"index, follow\" \/>\n<meta name=\"googlebot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta name=\"bingbot\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/abstracta.us\/blog\/performance-testing\/gatling-vs-jmeter-findings\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Open Source Gatling vs JMeter: Our Findings | Abstracta\" \/>\n<meta property=\"og:description\" content=\"We wanted to know: all things equal, how do these two open source load testing tools measure up? Read about our Gatling vs JMeter experiment.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/abstracta.us\/blog\/performance-testing\/gatling-vs-jmeter-findings\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog about AI-powered quality engineering for teams building complex software | Abstracta\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/AbstractaQA\/\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-06T19:16:16+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-05T21:21:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/abstracta.us\/wp-content\/uploads\/2017\/01\/gatling-vs-jmeter-1-min.png\" \/>\n\t<meta property=\"og:image:width\" content=\"420\" \/>\n\t<meta property=\"og:image:height\" content=\"236\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@fltoledo\" \/>\n<meta name=\"twitter:site\" content=\"@AbstractaUS\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/abstracta.us\/blog\/#website\",\"url\":\"https:\/\/abstracta.us\/blog\/\",\"name\":\"Blog about AI-powered quality engineering for teams building complex software | Abstracta\",\"description\":\"AI-powered quality engineering\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/abstracta.us\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/abstracta.us\/blog\/performance-testing\/gatling-vs-jmeter-findings\/#primaryimage\",\"inLanguage\":\"en-US\",\"url\":\"http:\/\/www.abstracta.us\/wp-content\/uploads\/2017\/01\/diagrama-benchmark-gatling-y-jmeter-1-min-1.png\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/abstracta.us\/blog\/performance-testing\/gatling-vs-jmeter-findings\/#webpage\",\"url\":\"https:\/\/abstracta.us\/blog\/performance-testing\/gatling-vs-jmeter-findings\/\",\"name\":\"Open Source Gatling vs JMeter: Our Findings | Abstracta\",\"isPartOf\":{\"@id\":\"https:\/\/abstracta.us\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/abstracta.us\/blog\/performance-testing\/gatling-vs-jmeter-findings\/#primaryimage\"},\"datePublished\":\"2017-01-06T19:16:16+00:00\",\"dateModified\":\"2025-05-05T21:21:01+00:00\",\"author\":{\"@id\":\"https:\/\/abstracta.us\/blog\/#\/schema\/person\/7421e539de0357d3adb0c69ed469a1c2\"},\"description\":\"We wanted to know: all things equal, how do these two open source load testing tools measure up? Read about our Gatling vs JMeter experiment.\",\"breadcrumb\":{\"@id\":\"https:\/\/abstracta.us\/blog\/performance-testing\/gatling-vs-jmeter-findings\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/abstracta.us\/blog\/performance-testing\/gatling-vs-jmeter-findings\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/abstracta.us\/blog\/performance-testing\/gatling-vs-jmeter-findings\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/abstracta.us\/blog\/\",\"url\":\"https:\/\/abstracta.us\/blog\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/abstracta.us\/blog\/performance-testing\/\",\"url\":\"https:\/\/abstracta.us\/blog\/performance-testing\/\",\"name\":\"Performance Testing\"}},{\"@type\":\"ListItem\",\"position\":3,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/abstracta.us\/blog\/performance-testing\/gatling-vs-jmeter-findings\/\",\"url\":\"https:\/\/abstracta.us\/blog\/performance-testing\/gatling-vs-jmeter-findings\/\",\"name\":\"Gatling vs JMeter: Our Findings\"}}]},{\"@type\":[\"Person\"],\"@id\":\"https:\/\/abstracta.us\/blog\/#\/schema\/person\/7421e539de0357d3adb0c69ed469a1c2\",\"name\":\"Federico Toledo, Chief Quality Officer at Abstracta\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/abstracta.us\/blog\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6de7ec6536c4028b5c02ad4ec1b9af0d?s=96&d=blank&r=g\",\"caption\":\"Federico Toledo, Chief Quality Officer at Abstracta\"},\"description\":\"Co-founder and COO of Abstracta\",\"sameAs\":[\"https:\/\/twitter.com\/fltoledo\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","_links":{"self":[{"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/posts\/8081"}],"collection":[{"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/comments?post=8081"}],"version-history":[{"count":24,"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/posts\/8081\/revisions"}],"predecessor-version":[{"id":17516,"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/posts\/8081\/revisions\/17516"}],"wp:attachment":[{"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/media?parent=8081"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/categories?post=8081"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abstracta.us\/blog\/wp-json\/wp\/v2\/tags?post=8081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}