{"id":26070,"date":"2016-04-26T10:28:59","date_gmt":"2016-04-26T08:28:59","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=26070"},"modified":"2016-04-26T10:28:59","modified_gmt":"2016-04-26T08:28:59","slug":"best-practices-for-designing-a-pragmatic-restful-api","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2016\/04\/26\/best-practices-for-designing-a-pragmatic-restful-api\/","title":{"rendered":"Best Practices for Designing a Pragmatic RESTful API"},"content":{"rendered":"<!-- google_ad_section_start -->\n<blockquote><p>An API is a user interface for developers. Put the effort in to ensure it&#8217;s not just functional but pleasant to use.<\/p><\/blockquote>\n<p><a href=\"http:\/\/www.vinaysahni.com\/\">Vinay Sahni<\/a> has a rather lengthy, detailed, and well-rounded post on <a href=\"http:\/\/www.vinaysahni.com\/best-practices-for-a-pragmatic-restful-api\">how to design a good RESTful API<\/a>. \u00a0It covers pretty much everything from URL structures and parameters, request methods, to error handling, documentation, and coding style.<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>An API is a user interface for developers. Put the effort in to ensure it&#8217;s not just functional but pleasant to use. Vinay Sahni has a rather lengthy, detailed, and well-rounded post on how to design a good RESTful API. \u00a0It covers pretty much everything from URL structures and parameters, request methods, to error handling, &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2016\/04\/26\/best-practices-for-designing-a-pragmatic-restful-api\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Best Practices for Designing a Pragmatic RESTful API<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Best Practices for Designing a Pragmatic RESTful API #WebDev #API #REST","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[1,18,62,1334],"tags":[2404,3224,1330],"keyring_services":[],"class_list":["post-26070","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-technology","category-web-work","tag-api","tag-rest","tag-web-development"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":29027,"url":"https:\/\/mamchenkov.net\/wordpress\/2018\/11\/25\/crell-apiproblem-a-simple-implementation-of-the-api-problem-specification\/","url_meta":{"origin":26070,"position":0},"title":"Crell\/ApiProblem &#8211; a simple implementation of the api-problem specification","author":"Leonid Mamchenkov","date":"November 25, 2018","format":false,"excerpt":"I've been working with REST\/RESTful APIs for a while now.\u00a0 They are usually a lot better than the SOAP or XML-RPC stuff we had before.\u00a0 But they are also not perfect.\u00a0 Error handling and reporting is a common area between many implementations that needs more attention and consistency.\u00a0 Turns out,\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":22078,"url":"https:\/\/mamchenkov.net\/wordpress\/2014\/06\/26\/google-introduces-gmail-api\/","url_meta":{"origin":26070,"position":1},"title":"Google introduces Gmail API","author":"Leonid Mamchenkov","date":"June 26, 2014","format":false,"excerpt":"Google is introducing the new Gmail API: While IMAP is great at what it was designed for (connecting email clients to email servers in a standard way), it wasn\u2019t really designed to do all of the cool things that you have been working on, which is why this week at\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":25971,"url":"https:\/\/mamchenkov.net\/wordpress\/2016\/03\/24\/wordpress-plugin-typecase-web-fonts\/","url_meta":{"origin":26070,"position":2},"title":"WordPress Plugin : Typecase Web Fonts","author":"Leonid Mamchenkov","date":"March 24, 2016","format":false,"excerpt":"Disclaimer: I'm not much of a fonts guy, but once in a while I just want to be. I was reading the \"Best Practices for Designing a Pragmatic RESTful API\" article, when I realized I liked the font it was written in very much. \u00a0I liked it so much that\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":37915,"url":"https:\/\/mamchenkov.net\/wordpress\/2019\/03\/11\/gitguardian-api-security-best-practices\/","url_meta":{"origin":26070,"position":3},"title":"GitGuardian API Security Best Practices","author":"Leonid Mamchenkov","date":"March 11, 2019","format":false,"excerpt":"The team behind GitGuardian, a tool that helps developers to keep credentials and other secrets outside of the source code, shares their documentation for the API security best practices. The cool bit about their documentation is that it covers both how to avoid the issues and how to solve them\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":23194,"url":"https:\/\/mamchenkov.net\/wordpress\/2014\/12\/22\/http-api-design-guide\/","url_meta":{"origin":26070,"position":4},"title":"HTTP API Design Guide","author":"Leonid Mamchenkov","date":"December 22, 2014","format":"link","excerpt":"HTTP API Design Guide This guide describes a set of HTTP+JSON API design practices, originally extracted from work on the Heroku Platform API. This guide informs additions to that API and also guides new internal APIs at Heroku. We hope it\u2019s also of interest to API designers outside of Heroku.\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":40663,"url":"https:\/\/mamchenkov.net\/wordpress\/2019\/03\/28\/api-platform-rest-and-graphql-framework-to-build-modern-api-driven-projects\/","url_meta":{"origin":26070,"position":5},"title":"API Platform &#8211; REST and GraphQL framework to build modern API-driven projects","author":"Leonid Mamchenkov","date":"March 28, 2019","format":false,"excerpt":"API Platform is a framework for building API-driven projects. I came across this via this blog post that covers the recent release of v2.4. The list of features and components is quite extensive: Read and write support for MongoDBRead support for ElasticsearchMessage queues support via a number of brokers, including\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2019\/03\/api-platform-2.4-1200x600.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2019\/03\/api-platform-2.4-1200x600.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2019\/03\/api-platform-2.4-1200x600.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2019\/03\/api-platform-2.4-1200x600.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2019\/03\/api-platform-2.4-1200x600.png?resize=1050%2C600&ssl=1 3x"},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/26070","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=26070"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/26070\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=26070"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=26070"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=26070"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=26070"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}