OpenAPI v3.1 Resources for Tooling DevelopersOpenAPI v3.1.0 has a bunch of great changes, solving problems like the subtle differences between JSON Schema objects and OpenAPI Schema…
API Evolution for REST/HTTP APIsThere are a lot of pros and cons to various approaches to API versioning, but that has been covered in depth before: API Versioning Has No…
A Happy Compromise Between Customization and CacheabilityWith endpoint-based APIs (REST, RESTish, SOAP, RPC, AJAX-ish junk, etc.) you get to choose if you want increased likelihood of network cache…
Representing State in REST and GraphQLRepresenting state is a complex thing. At my last two jobs, it’s been very common for APIs to be treated like “databases over HTTP”. The…
You Might Not Need GraphQLAfter writing about how GraphQL and REST differ in various regards, and taking a closer look at caching in particular, I wanted to write…
GraphQL vs REST: CachingRecently I wrote GraphQL vs REST: Overview, giving a hype-free outline of the differences between REST and GraphQL. One section that would…
GraphQL vs REST: OverviewA few months back I wrote a comparison between RPC and REST for Smashing Magazine, and now I want to talk about the differences between REST…
Building APIs with Rails: Documentation TestingNow that we’ve started building a very basic API, we should make sure that the documentation is kept up to date with our progress. Even…
Building REST APIs with Rails: Basic SerializationThird video in a pile of LiveCoding.tv videos, shows how to use ActiveModel Serializer to shape the output of your resources. I totally…
Mocking APIs with API BlueprintThe second video in a pile of LiveCoding.tv videos shows how to use your API Blueprint documentation to mock APIs, and a few different ways…
API Documentation: Do it FirstTwo years ago I finished the first edition of Build APIs You Won’t Hate, and since then I’ve worked on bigger and better projects, using my…
Dredd v1.1.0: A Bit DifferentA new version of Dredd - the API Documentation testing tool from Apiary Inc. - has been released, and it has changed a few things for the…
Why Care About PHP Middleware?Recently there has been a lot of buzz about HTTP middleware in PHP. Since PSR-7 was accepted, everyone and their friend Sherly has been…
PUT vs PATCH vs JSON-PATCHA question that is asked with increasing regularity in the APIs You Won’t Hate Slack Group is one which has been asked for years, but does…
HTTP/REST API File UploadsFile uploads are one thing that always feel rather complicated, and working out how to handle this in an API doesn’t make life easier. For…
HTTP Documentation with API BlueprintWhen planning my talk and book on REST/HTTP API development, I ended up mentioning documentation towards the end, and flippantly said “Oh…
HTTP Status Codes Are Not EnoughI spotted an article called Just learn Rails (Part 3) HTTP status codes. It started off good, and I liked that it was teaching people to…
Auto-Incrementing IDs: Giving your Data AwaySomething we’re always taught as developers, usually by tutorials or via the defaults in various ORM tools, is every SQL table needs an auto…
Avoid Hardcoding HTTP Status CodesA lot of things in programming are argued to death, but one subject where people almost unanimously agree is that magic numbers can be a…
The Importance of Serializing API OutputI’ve given the API Pain Points talk a bazillion times over the last year. In just 2015 I gave it at: Lone Star PHP OpenWest ConFoo One…
Dredd: Do Your HTTP API JusticeUpdate 2021-02-08: Old post is old! I really don’t recommend messing with Dredd anymore, it was a handy stepping stone on the way to…
RESTful Deletions, Restorations and RevisionsTwo weeks ago I posted RESTful URLs: Actions Need Not Apply which was all about how the only action/verb to appear in the HTTP Request…
RESTful URLs: Actions Need Not ApplyI was doing a little consulting for a company while I was out in South Africa and we played the game. You fire SOAP functionality at me, and…
Creating proxies with ApacheOther than just being easy to forget, these ports are often not open in office environments or internet cafe’s. To get any page on any port…