dingo API

Dingo/API is a popular open source project that provides us with a set of tools to help us easily and quickly build our own API.

This starter package provides a sane configuration for dingo/API with optional JWT support.
Note that it's up to you to explore additional configuration options and functionalities provided by dingo/API on their wiki as only the basics have been pre-configured here.

API Setup

The api prefix is configured to be /api/, this means all your endpoints will be preceded by /api/.
This is defined in your .env file and effectively active in your config/api.php. Feel free to explore other options, like setting a subdomain instead of a prefix.



You can enable debug mode on the API with the API_DEBUG=true entry in your .env file, in case you'd output the stacktrace of an error.

API Versionning

The default version for the API is set to v1.
This is very helpful if you'd like to support backward compatibility for some endpoints on your API.
This default verison is applied in app/Providers/RouteServiceProvider.php, since most users start off with just 1 version so it was moved out of your way from the routes file. Feel free to remove it from there and add it manually to specific routes in your routes.php. You can also create a routes file per version. It's all up to you.

Content Negotiation

You're probably wondering: how does the client ask for a specific version?
This happens through content negotiation, which is the Accept header sent with every request. Here's the Accept header that you need to send to specify a json response format and version v1:
Accept: application/x.laravel.v1+json

You can see these values in your config/api.php. Feel free to change them (and update them in your Restangular configuration ).
Although this header is not required, it has been configured in your Restangular configuration by default. However, it is recommended that you enable Strict Mode on your staging & production environment using API_STRICT=true in your .env file.
Strict mode would force the client to send the Accept header.
Forcing the client to send the accept header will make sure that other potential users of your API (other developers maybe?) are using the correct version of your API so they won't be affected when you release a new version (say v2).

So as a wrap up, content negotiation allows the client to request a specific version and a specific return type from the API.


You don't have to enable strict mode locally, as it'll make testing a bit painful.