Building a back-end API layer introduces a whole new layer of coordination between server and client code. While there are many aspects to this delicate dance of communication, one key ingredient to minimizing back-and-forth-confusion-about what-call-does-what, is consistently communicating about your API endpoints.
This is by no means rocket science, but over time I’ve created a template that I now tend to use and have been asked to share. Conveniently when the time comes to publish an API externally, this serves as an invaluable tool for creating public documentation. You can see the markdown template alongside an example in this gist.
Title |
Example : Show All Users
|
---|---|
URL |
/users or /users/:id or /users?id=:id
|
Method |
GET | POST | DELETE | PUT
|
URL Params |
Required: id=[integer] example: id=12 Optional photo_id=[alphanumeric] example: photo_id=2345kj3 |
Data Params |
Example: { u : { email : [string], name : [string], current_password : [alphanumeric] password : [alphanumeric], password_confirmation : [alphanumeric] } }Example: { u : { email : "john@smith.com", name : "John", current_password : "apassw0rd" password : "anewpassw0rd", password_confirmation : "anewpassw0rd" } } |
Success Response |
Example: Code: 200 Content: { id : 12 } |
Error Response |
Example: Code: 401 UNAUTHORIZED Content: { error : "Log in" } OR Code: 422 Unprocessable Entry Content: { error : "Email invalid" } |
Sample Call |
$.ajax({ url: "/users", dataType: "json", data : { u: { id : 12, email : "john@smith.com" } }, type : "PUT", success : function(r) { console.log(r); } }); |
Notes |
|
Are there other aspects of your API endpoints that you tend to communicate? What additional information should be shared?