{"id":351419,"date":"2024-05-20T13:41:19","date_gmt":"2024-05-20T13:41:19","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=351419"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=351419","title":{"rendered":"<span>More powerful and intelligent task scheduling framework \u2014 Openjob 1.0.6 published<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>More powerful and intelligent task scheduling framework.<\/h2>\n<h3>Introduction\u00a0<\/h3>\n<p>Openjob is a new\u00a0 distributed task scheduling framework based on Akka architecture. Supports multiple cronjob, delay task, workflow, lightweight distributed computing, unlimited horizontal scaling, with high scalability and fault tolerance. Also has complete management, powerful alarm monitoring, and support multiple languages<\/p>\n<ul>\n<li>\n<p>Complete task log, and suppport storage (H2\/Mysql\/Elasticsearch).<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>detailed recording of task execution stack information<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>Provides task event monitoring alarms,\u00a0 detailed alarm histories, and support notifications with Webhook,Wecom, ,Dingding and Feishu triggers.\u00a0<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>Designed with namespace, support button-level access\u00a0 and easy to manage complex project.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>Supports multiple programming languages, such as Java, Go, PHP and Python and various languages is very friendly.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p>If you are looking for a high-performance distributed task scheduling framework that supports cronjob, delay task, lightweight computing, workflow, and supports multiple programming languages, then Openjob is definitely the way to go.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0c1\/013\/e65\/0c1013e6599cd8ff242d9f0a1433fffc.png\" width=\"1653\" height=\"902\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0c1\/013\/e65\/0c1013e6599cd8ff242d9f0a1433fffc.png\"\/><\/figure>\n<h3>Feature<\/h3>\n<p>Openjob not only supports basic cronjob, but also provides delayed jobs, distributed computing, and workflow<\/p>\n<h4>Cronjob<\/h4>\n<ul>\n<li>\n<p><strong>Cronjob<\/strong>, support Unix Crontab expression<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Second<\/strong>, execution cycle less than 60 seconds<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Fixed rate<\/strong>, execute tasks at a fixed frequency with minute unit<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/870\/48c\/3e7\/87048c3e73e8745f81676057d37270c2.png\" width=\"1643\" height=\"921\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/870\/48c\/3e7\/87048c3e73e8745f81676057d37270c2.png\"\/><\/figure>\n<h4>Delay Task<\/h4>\n<ul>\n<li>\n<p>Distributed, high-performance delay task\u00a0 based on Redis, and providing rich reports and statistics<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d66\/da2\/e0a\/d66da2e0ae2cb34261a4b5890892f331.png\" width=\"1655\" height=\"924\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d66\/da2\/e0a\/d66da2e0ae2cb34261a4b5890892f331.png\"\/><\/figure>\n<h4>Distributed Computing\u00a0<\/h4>\n<ul>\n<li>\n<p><strong>Standalone<\/strong>, execute on a worker client<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Broadcast<\/strong>, execute on all worker clients<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Map<\/strong>, a map function can distribute big data to multiple machines for execution, like Hadoop map<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>MapReduce<\/strong>, MapReduce is an extension of the Map.After all map sub-tasks are completed, the Reduce method is executed, which can process the results and data of the task execution in the Reduce method.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Sharding<\/strong>, like Elastic-Job model, configure sharding numbers on the management, which can be scheduled to different client by sharding, and supports multiple languages.<\/p>\n<\/li>\n<\/ul>\n<h4>Processor\u00a0<\/h4>\n<ul>\n<li>\n<p><strong>Processor<\/strong>, execute by function or class(support Java\/Golang\/PH)<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>HTTP<\/strong>, http request, used to periodically request an HTTP<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Kettle<\/strong>, built-in Kettle command executor<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Shell<\/strong>, shell script<\/p>\n<\/li>\n<\/ul>\n<h4>Visual operations<\/h4>\n<ul>\n<li>\n<p><strong>Dashboard<\/strong>, rich task statistics and reports<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Task history<\/strong>, task execution history records<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Task log<\/strong>, complete task log, and suppport storage (H2\/Mysql\/Elasticsearch).<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Task running stack<\/strong>, detailed recording of task execution stack information<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/561\/f6c\/34d\/561f6c34d68c47185e6acbd7d4264df9.png\" width=\"1659\" height=\"928\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/561\/f6c\/34d\/561f6c34d68c47185e6acbd7d4264df9.png\"\/><\/figure>\n<h4>Alarms and permissions<\/h4>\n<ul>\n<li>\n<p>Provides task event monitoring alarms,\u00a0 detailed alarm histories, and support notifications with Webhook,Wecom, Dingding and Feishu triggers.\u00a0<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>Designed with namespace, support button-level access\u00a0 and easy to manage complex project.<\/p>\n<\/li>\n<\/ul>\n<h4>Multiple languages<\/h4>\n<ul>\n<li>\n<p><strong>Java <\/strong>java and its frameworks, with native support.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Go <\/strong>golang support use go mod install<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>PHP<\/strong> PHP support use Golang agent to execute task by command mode \u3002Swoole frameworks support composer install.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Python<\/strong> python support use Golang agent to execute task by command mode<\/p>\n<\/li>\n<\/ul>\n<h3>Application Scenario<\/h3>\n<p>Openjob is well-suited for business scenarios that have task schedule and delay task. such as every day to clean data and report generation. It is also suitable for lightweight computing, and Map\/MapReduce can process big data computing. For complex task flows or workflow, it can design workflow with UI<\/p>\n<h3>Update<\/h3>\n<p>Openjob v1.0.6 add monitoring and alarm, fixed\u00a0 known issues<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eaa\/8c0\/e42\/eaa8c0e428fb09fbcf873d473d1cf744.png\" width=\"1653\" height=\"950\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eaa\/8c0\/e42\/eaa8c0e428fb09fbcf873d473d1cf744.png\"\/><\/figure>\n<p><strong>Feature<\/strong><\/p>\n<p>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/141\" rel=\"noopener noreferrer nofollow\">#141<\/a>] Add alarm and monitoring(dingding\/wecom\/feishu\/webhook)<br \/>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/141\" rel=\"noopener noreferrer nofollow\">#141<\/a>] Add execute timeout for cronjob<br \/>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/141\" rel=\"noopener noreferrer nofollow\">#141<\/a>] Add child fail status<br \/>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/144\" rel=\"noopener noreferrer nofollow\">#144<\/a>] Add next execute time<br \/>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/144\" rel=\"noopener noreferrer nofollow\">#144<\/a>] Add personal page<br \/>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/144\" rel=\"noopener noreferrer nofollow\">#144<\/a>] Add running status to dashboard<\/p>\n<p><strong>Bugfix<\/strong><\/p>\n<p>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/144\" rel=\"noopener noreferrer nofollow\">#144<\/a>] Fixed big task log<\/p>\n<p><strong>Optimize<\/strong><\/p>\n<p>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/144\" rel=\"noopener noreferrer nofollow\">#144<\/a>] Auto create index for Elasticsearch7<br \/>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/144\" rel=\"noopener noreferrer nofollow\">#144<\/a>] User default avatar<\/p>\n<h3>More<\/h3>\n<ul>\n<li>\n<p>Official website: <a href=\"https:\/\/openjob.io\/\" rel=\"noopener noreferrer nofollow\">https:\/\/openjob.io<\/a><\/p>\n<\/li>\n<li>\n<p>Github: <a href=\"https:\/\/github.com\/open-job\/openjob\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/open-job\/openjob<\/a><\/p>\n<\/li>\n<li>\n<p>Live demo: <a href=\"https:\/\/demo.openjob.io\/\" rel=\"noopener noreferrer nofollow\">https:\/\/demo.openjob.io<\/a><\/p>\n<ul>\n<li>\n<p>username: openjob<\/p>\n<\/li>\n<li>\n<p>password: <a href=\"http:\/\/openjob.io\" rel=\"noopener noreferrer nofollow\">openjob.io<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/752884\/\"> https:\/\/habr.com\/ru\/articles\/752884\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>More powerful and intelligent task scheduling framework.<\/h2>\n<h3>Introduction\u00a0<\/h3>\n<p>Openjob is a new\u00a0 distributed task scheduling framework based on Akka architecture. Supports multiple cronjob, delay task, workflow, lightweight distributed computing, unlimited horizontal scaling, with high scalability and fault tolerance. Also has complete management, powerful alarm monitoring, and support multiple languages<\/p>\n<ul>\n<li>\n<p>Complete task log, and suppport storage (H2\/Mysql\/Elasticsearch).<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>detailed recording of task execution stack information<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>Provides task event monitoring alarms,\u00a0 detailed alarm histories, and support notifications with Webhook,Wecom, ,Dingding and Feishu triggers.\u00a0<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>Designed with namespace, support button-level access\u00a0 and easy to manage complex project.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>Supports multiple programming languages, such as Java, Go, PHP and Python and various languages is very friendly.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p>If you are looking for a high-performance distributed task scheduling framework that supports cronjob, delay task, lightweight computing, workflow, and supports multiple programming languages, then Openjob is definitely the way to go.<\/p>\n<figure class=\"full-width\"><\/figure>\n<h3>Feature<\/h3>\n<p>Openjob not only supports basic cronjob, but also provides delayed jobs, distributed computing, and workflow<\/p>\n<h4>Cronjob<\/h4>\n<ul>\n<li>\n<p><strong>Cronjob<\/strong>, support Unix Crontab expression<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Second<\/strong>, execution cycle less than 60 seconds<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Fixed rate<\/strong>, execute tasks at a fixed frequency with minute unit<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><\/figure>\n<h4>Delay Task<\/h4>\n<ul>\n<li>\n<p>Distributed, high-performance delay task\u00a0 based on Redis, and providing rich reports and statistics<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><\/figure>\n<h4>Distributed Computing\u00a0<\/h4>\n<ul>\n<li>\n<p><strong>Standalone<\/strong>, execute on a worker client<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Broadcast<\/strong>, execute on all worker clients<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Map<\/strong>, a map function can distribute big data to multiple machines for execution, like Hadoop map<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>MapReduce<\/strong>, MapReduce is an extension of the Map.After all map sub-tasks are completed, the Reduce method is executed, which can process the results and data of the task execution in the Reduce method.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Sharding<\/strong>, like Elastic-Job model, configure sharding numbers on the management, which can be scheduled to different client by sharding, and supports multiple languages.<\/p>\n<\/li>\n<\/ul>\n<h4>Processor\u00a0<\/h4>\n<ul>\n<li>\n<p><strong>Processor<\/strong>, execute by function or class(support Java\/Golang\/PH)<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>HTTP<\/strong>, http request, used to periodically request an HTTP<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Kettle<\/strong>, built-in Kettle command executor<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Shell<\/strong>, shell script<\/p>\n<\/li>\n<\/ul>\n<h4>Visual operations<\/h4>\n<ul>\n<li>\n<p><strong>Dashboard<\/strong>, rich task statistics and reports<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Task history<\/strong>, task execution history records<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Task log<\/strong>, complete task log, and suppport storage (H2\/Mysql\/Elasticsearch).<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Task running stack<\/strong>, detailed recording of task execution stack information<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><\/figure>\n<h4>Alarms and permissions<\/h4>\n<ul>\n<li>\n<p>Provides task event monitoring alarms,\u00a0 detailed alarm histories, and support notifications with Webhook,Wecom, Dingding and Feishu triggers.\u00a0<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>Designed with namespace, support button-level access\u00a0 and easy to manage complex project.<\/p>\n<\/li>\n<\/ul>\n<h4>Multiple languages<\/h4>\n<ul>\n<li>\n<p><strong>Java <\/strong>java and its frameworks, with native support.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Go <\/strong>golang support use go mod install<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>PHP<\/strong> PHP support use Golang agent to execute task by command mode \u3002Swoole frameworks support composer install.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Python<\/strong> python support use Golang agent to execute task by command mode<\/p>\n<\/li>\n<\/ul>\n<h3>Application Scenario<\/h3>\n<p>Openjob is well-suited for business scenarios that have task schedule and delay task. such as every day to clean data and report generation. It is also suitable for lightweight computing, and Map\/MapReduce can process big data computing. For complex task flows or workflow, it can design workflow with UI<\/p>\n<h3>Update<\/h3>\n<p>Openjob v1.0.6 add monitoring and alarm, fixed\u00a0 known issues<\/p>\n<figure class=\"full-width\"><\/figure>\n<p><strong>Feature<\/strong><\/p>\n<p>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/141\" rel=\"noopener noreferrer nofollow\">#141<\/a>] Add alarm and monitoring(dingding\/wecom\/feishu\/webhook)<br \/>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/141\" rel=\"noopener noreferrer nofollow\">#141<\/a>] Add execute timeout for cronjob<br \/>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/141\" rel=\"noopener noreferrer nofollow\">#141<\/a>] Add child fail status<br \/>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/144\" rel=\"noopener noreferrer nofollow\">#144<\/a>] Add next execute time<br \/>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/144\" rel=\"noopener noreferrer nofollow\">#144<\/a>] Add personal page<br \/>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/144\" rel=\"noopener noreferrer nofollow\">#144<\/a>] Add running status to dashboard<\/p>\n<p><strong>Bugfix<\/strong><\/p>\n<p>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/144\" rel=\"noopener noreferrer nofollow\">#144<\/a>] Fixed big task log<\/p>\n<p><strong>Optimize<\/strong><\/p>\n<p>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/144\" rel=\"noopener noreferrer nofollow\">#144<\/a>] Auto create index for Elasticsearch7<br \/>[<a href=\"https:\/\/github.com\/open-job\/openjob\/pull\/144\" rel=\"noopener noreferrer nofollow\">#144<\/a>] User default avatar<\/p>\n<h3>More<\/h3>\n<ul>\n<li>\n<p>Official website: <a href=\"https:\/\/openjob.io\/\" rel=\"noopener noreferrer nofollow\">https:\/\/openjob.io<\/a><\/p>\n<\/li>\n<li>\n<p>Github: <a href=\"https:\/\/github.com\/open-job\/openjob\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/open-job\/openjob<\/a><\/p>\n<\/li>\n<li>\n<p>Live demo: <a href=\"https:\/\/demo.openjob.io\/\" rel=\"noopener noreferrer nofollow\">https:\/\/demo.openjob.io<\/a><\/p>\n<ul>\n<li>\n<p>username: openjob<\/p>\n<\/li>\n<li>\n<p>password: <a href=\"http:\/\/openjob.io\" rel=\"noopener noreferrer nofollow\">openjob.io<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/752884\/\"> https:\/\/habr.com\/ru\/articles\/752884\/<\/a><br \/><\/br><\/br><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-351419","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/351419","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=351419"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/351419\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=351419"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=351419"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=351419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}