{"id":6310,"date":"2014-10-08T16:57:00","date_gmt":"2014-10-08T14:57:00","guid":{"rendered":"http:\/\/blog.zhaw.ch\/icclab\/?p=6310"},"modified":"2014-11-05T18:30:13","modified_gmt":"2014-11-05T16:30:13","slug":"comparison-of-ryu-and-opendaylight-northbound-apis","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/","title":{"rendered":"Comparison of Ryu and OpenDaylight Northbound APIs"},"content":{"rendered":"<p align=\"justify\">For our SDK4SDN work\u00a0we made\u00a0a comparison between two SDN controllers:\u00a0<a title=\"Ryu \" href=\"http:\/\/osrg.github.io\/ryu\/\">Ryu<\/a> and <a title=\"OpenDaylight\" href=\"http:\/\/www.opendaylight.org\/\">Opendaylight<\/a>. We focused\u00a0on the Northbound APIs of the controllers and we compared the capabilities and ease of use of their respective REST APIs.<\/p>\n<p align=\"justify\"> Both controllers support <a title=\"REST\" href=\"http:\/\/en.wikipedia.org\/wiki\/Representational_state_transfer\">REST<\/a>, which is based on a mix of HTTP, JSON and XML. In Ryu a WSGI web server is\u00a0used to create the REST APIs, which link with other systems and browsers. In OpenDaylight, the Jersey library provides the REST APIs with both JSON and XML interfaces. Jersey also provides its own API to simplify RESTful services by extending the <a title=\"JAX-RS\" href=\"http:\/\/en.wikipedia.org\/wiki\/Java_API_for_RESTful_Web_Services\">JAX-RS<\/a> toolkit which is compliant with the Northbound API.<\/p>\n<p align=\"justify\"><!--more--><\/p>\n<p align=\"justify\">The tables below outline some standard operations and\u00a0Northbound REST APIs where you can find similar REST methods.<\/p>\n<table>\n<caption style=\"text-align: center\" align=\"bottom\">Table 1- Northbound REST API methods similarities in OpenStack<\/caption>\n<thead>\n<tr>\n<td style=\"text-align: left;padding-left: 10px\" colspan=\"3\"><b>OpenStack<\/b><\/td>\n<\/tr>\n<tr bgcolor=\"#e2e2e2\">\n<td style=\"padding-left: 10px\"><b>Operation<\/b><\/td>\n<td style=\"text-align: center\"><b><a title=\"Ryu api\" href=\"https:\/\/github.com\/osrg\/ryu\/tree\/master\/ryu\/app\">Ryu API<\/a><\/b><\/td>\n<td style=\"text-align: center\"><b><a title=\"Opendaylight API\" href=\"https:\/\/wiki.opendaylight.org\/view\/OpenDaylight_Controller:REST_Reference_and_Authentication\">OpenDaylight API<\/a><\/b><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding-left: 5px\">Router Configuration<\/td>\n<td style=\"padding-left: 30px\"><\/td>\n<td style=\"padding-left: 0px\">Neutron Routers Northbound<\/td>\n<\/tr>\n<tr bgcolor=\"#e2e2e2\">\n<td style=\"padding-left: 5px\">Firewall Configuration<\/td>\n<td style=\"padding-left: 30px\"><\/td>\n<td style=\"padding-left: 0px\">Neutron Firewall Northbound<br \/>\nNeutron Firewall Policy Northbound<br \/>\nNeutron Firewall Rules Northbound<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 5px\">Network Configuration<\/td>\n<td style=\"padding-left: 30px\">rest.py<\/td>\n<td style=\"padding-left: 0px\">Neutron Networks Northbound<\/td>\n<\/tr>\n<tr bgcolor=\"#e2e2e2\">\n<td style=\"padding-left: 5px\">Switch Configuration<\/td>\n<td style=\"padding-left: 30px\">rest_conf_switch.py<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 5px\">Port Configuration<\/td>\n<td style=\"padding-left: 30px\">rest.py<\/td>\n<td style=\"padding-left: 0px\">Neutron Ports Northbound<\/td>\n<\/tr>\n<tr bgcolor=\"#e2e2e2\">\n<td style=\"padding-left: 5px\">Flow Programming<\/td>\n<td style=\"padding-left: 30px\"><\/td>\n<td style=\"padding-left: 0px\"><\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 5px\">Statistics<\/td>\n<td style=\"padding-left: 30px\"><\/td>\n<td style=\"padding-left: 0px\"><\/td>\n<\/tr>\n<tr bgcolor=\"#e2e2e2\">\n<td style=\"padding-left: 5px\">Topology<\/td>\n<td style=\"padding-left: 30px\"><\/td>\n<td style=\"padding-left: 0px\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table>\n<caption style=\"text-align: center\" align=\"bottom\">Table 2- Northbound REST API methods similarities in Generic Networks<\/caption>\n<thead>\n<tr>\n<td style=\"text-align: left;padding-left: 10px\" colspan=\"3\"><b>Generic Networks<\/b><\/td>\n<\/tr>\n<tr bgcolor=\"#e2e2e2\">\n<td style=\"padding-left: 10px\"><b>Operation<\/b><\/td>\n<td style=\"text-align: center\"><b>Ryu API<\/b><\/td>\n<td style=\"text-align: center\"><b>OpenDaylight API<\/b><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding-left: 10px\">Router Configuration<\/td>\n<td style=\"padding-left: 30px\">rest_router.py<\/td>\n<td style=\"padding-left: 30px\">Static Routing Northbound<\/td>\n<\/tr>\n<tr bgcolor=\"#e2e2e2\">\n<td style=\"padding-left: 10px\">Firewall Configuration<\/td>\n<td style=\"padding-left: 30px\">rest_firewall.py<\/td>\n<td style=\"padding-left: 30px\"><\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 10px\">Network Configuration<\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr bgcolor=\"#e2e2e2\">\n<td style=\"padding-left: 10px\">Switch Configuration<\/td>\n<td><\/td>\n<td style=\"padding-left: 30px\">Switch Northbound<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 10px\">Port Configuration<\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr bgcolor=\"#e2e2e2\">\n<td style=\"padding-left: 10px\">Flow Programming<\/td>\n<td style=\"padding-left: 30px\">ofctl_rest.py<\/td>\n<td style=\"padding-left: 30px\">Flow Programmer Northbound<\/td>\n<\/tr>\n<tr>\n<td style=\"padding-left: 10px\">Statistics<\/td>\n<td style=\"padding-left: 30px\">ofctl_rest.py<\/td>\n<td style=\"padding-left: 30px\">Statistics Northbound<\/td>\n<\/tr>\n<tr bgcolor=\"#e2e2e2\">\n<td style=\"padding-left: 10px\">Topology<\/td>\n<td style=\"padding-left: 30px\">rest_topology.py<\/td>\n<td style=\"padding-left: 30px\">Topology Northbound JAXRS<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>A detailed description of REST APIs methods can be found here : <a title=\"Ryu Northbound\" href=\"https:\/\/drive.google.com\/file\/d\/0ByB5bntsKtB5SUhzT1dQRFc5MW8\/view?usp=sharing\" target=\"_blank\">Ryu Northbound APIs<\/a> and <a title=\"OpenDaylight Northbound\" href=\"https:\/\/drive.google.com\/file\/d\/0ByB5bntsKtB5U2lSTThad2JhRms\/view?usp=sharing\" target=\"_blank\">OpenDaylight Northbound APIs<\/a>.<\/p>\n<p align=\"justify\">The OpenDaylight controller is built using the Java <a title=\"OSGi\" href=\"http:\/\/en.wikipedia.org\/wiki\/OSGi\">OSGi framework<\/a>. OSGi adds a modular framework that allows starting, stopping, loading and unloading of Java modules without bringing down the entire running JVM platform. Ryu controller does not offer this comodity. In Ryu we need to stop the controller and run it again with the needed modules for the REST methods we want to execute or we need to build a REST API with all REST modules included in it, which runs once and provides all REST methods without stopping the controller. <\/p>\n<p align=\"justify\">After this analysis, we concluded that there are not so many similarities between Northbound parts of the controllers. To unify communication between controllers we need another layer of APIs. But creating another layer of abstraction on top of the controllers would not be very efficient.<\/p>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/comparison\/\">comparison<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/jax-rs\/\">JAX-RS<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/northbound\/\">Northbound<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/opendaylight\/\">OpenDaylight<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/osgi\/\">OSGi<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/rest\/\">REST<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/ryu\/\">Ryu<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/sdk4sdn\/\">SDK4SDN<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/sdn\/\">SDN<\/a>, <a href=\"https:\/\/blog.zhaw.ch\/icclab\/tag\/wsgi\/\">WSGI<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>For our SDK4SDN work\u00a0we made\u00a0a comparison between two SDN controllers:\u00a0Ryu and Opendaylight. We focused\u00a0on the Northbound APIs of the controllers and we compared the capabilities and ease of use of their respective REST APIs. Both controllers support REST, which is based on a mix of HTTP, JSON and XML. In Ryu a WSGI web server [&hellip;]<\/p>\n","protected":false},"author":150,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[1],"tags":[473,474,466,465,472,467,464,463,293,471],"features":[],"class_list":["post-6310","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-comparison","tag-jax-rs","tag-northbound","tag-opendaylight","tag-osgi","tag-rest","tag-ryu","tag-sdk4sdn","tag-sdn","tag-wsgi"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Comparison of Ryu and OpenDaylight Northbound APIs - Service Engineering (ICCLab &amp; SPLab)<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comparison of Ryu and OpenDaylight Northbound APIs\" \/>\n<meta property=\"og:description\" content=\"For our SDK4SDN work\u00a0we made\u00a0a comparison between two SDN controllers:\u00a0Ryu and Opendaylight. We focused\u00a0on the Northbound APIs of the controllers and we compared the capabilities and ease of use of their respective REST APIs. Both controllers support REST, which is based on a mix of HTTP, JSON and XML. In Ryu a WSGI web server [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Engineering (ICCLab &amp; SPLab)\" \/>\n<meta property=\"article:published_time\" content=\"2014-10-08T14:57:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-11-05T16:30:13+00:00\" \/>\n<meta name=\"author\" content=\"cadr\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"cadr\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/\"},\"author\":{\"name\":\"cadr\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/f318fd6f2cea5be3d74b14915e7b0aaf\"},\"headline\":\"Comparison of Ryu and OpenDaylight Northbound APIs\",\"datePublished\":\"2014-10-08T14:57:00+00:00\",\"dateModified\":\"2014-11-05T16:30:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/\"},\"wordCount\":407,\"commentCount\":0,\"keywords\":[\"comparison\",\"JAX-RS\",\"Northbound\",\"OpenDaylight\",\"OSGi\",\"REST\",\"Ryu\",\"SDK4SDN\",\"SDN\",\"WSGI\"],\"articleSection\":[\"*.*\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/\",\"name\":\"Comparison of Ryu and OpenDaylight Northbound APIs - Service Engineering (ICCLab &amp; SPLab)\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\"},\"datePublished\":\"2014-10-08T14:57:00+00:00\",\"dateModified\":\"2014-11-05T16:30:13+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/f318fd6f2cea5be3d74b14915e7b0aaf\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/icclab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Comparison of Ryu and OpenDaylight Northbound APIs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/\",\"name\":\"Service Engineering (ICCLab &amp; SPLab)\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/f318fd6f2cea5be3d74b14915e7b0aaf\",\"name\":\"cadr\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2012\/05\/icclab-logo-150x150.png\",\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2012\/05\/icclab-logo-150x150.png\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/icclab\/files\/2012\/05\/icclab-logo-150x150.png\",\"caption\":\"cadr\"},\"url\":\"https:\/\/blog.zhaw.ch\/icclab\/author\/cadr\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Comparison of Ryu and OpenDaylight Northbound APIs - Service Engineering (ICCLab &amp; SPLab)","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/","og_locale":"en_US","og_type":"article","og_title":"Comparison of Ryu and OpenDaylight Northbound APIs","og_description":"For our SDK4SDN work\u00a0we made\u00a0a comparison between two SDN controllers:\u00a0Ryu and Opendaylight. We focused\u00a0on the Northbound APIs of the controllers and we compared the capabilities and ease of use of their respective REST APIs. Both controllers support REST, which is based on a mix of HTTP, JSON and XML. In Ryu a WSGI web server [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/","og_site_name":"Service Engineering (ICCLab &amp; SPLab)","article_published_time":"2014-10-08T14:57:00+00:00","article_modified_time":"2014-11-05T16:30:13+00:00","author":"cadr","twitter_card":"summary_large_image","twitter_misc":{"Written by":"cadr","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/"},"author":{"name":"cadr","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/f318fd6f2cea5be3d74b14915e7b0aaf"},"headline":"Comparison of Ryu and OpenDaylight Northbound APIs","datePublished":"2014-10-08T14:57:00+00:00","dateModified":"2014-11-05T16:30:13+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/"},"wordCount":407,"commentCount":0,"keywords":["comparison","JAX-RS","Northbound","OpenDaylight","OSGi","REST","Ryu","SDK4SDN","SDN","WSGI"],"articleSection":["*.*"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/","url":"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/","name":"Comparison of Ryu and OpenDaylight Northbound APIs - Service Engineering (ICCLab &amp; SPLab)","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#website"},"datePublished":"2014-10-08T14:57:00+00:00","dateModified":"2014-11-05T16:30:13+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/f318fd6f2cea5be3d74b14915e7b0aaf"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/icclab\/comparison-of-ryu-and-opendaylight-northbound-apis\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/icclab\/"},{"@type":"ListItem","position":2,"name":"Comparison of Ryu and OpenDaylight Northbound APIs"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/icclab\/#website","url":"https:\/\/blog.zhaw.ch\/icclab\/","name":"Service Engineering (ICCLab &amp; SPLab)","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/icclab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/icclab\/#\/schema\/person\/f318fd6f2cea5be3d74b14915e7b0aaf","name":"cadr","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.zhaw.ch\/icclab\/files\/2012\/05\/icclab-logo-150x150.png","url":"https:\/\/blog.zhaw.ch\/icclab\/files\/2012\/05\/icclab-logo-150x150.png","contentUrl":"https:\/\/blog.zhaw.ch\/icclab\/files\/2012\/05\/icclab-logo-150x150.png","caption":"cadr"},"url":"https:\/\/blog.zhaw.ch\/icclab\/author\/cadr\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/6310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/users\/150"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/comments?post=6310"}],"version-history":[{"count":16,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/6310\/revisions"}],"predecessor-version":[{"id":6587,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/posts\/6310\/revisions\/6587"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/media?parent=6310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/categories?post=6310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/tags?post=6310"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/icclab\/wp-json\/wp\/v2\/features?post=6310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}