A simple but yet powerful library to expose your entities through JSON API.
Clone or download
JuanWilde and moein Pass entity to checkAccess method to allow Symfony Voters check the r… (

* Pass entity to checkAccess method to allow Symfony Voters check the resource data

* Restore code style. Add  to updateEntity and deleteEntity methods

* Add delete action within checkAccess method. Add getDeleteRole within ResourceConfig

* fix docblock code style
Latest commit c50d7d9 Jul 30, 2018


Jade(Json Api Doctrine Exposer)

What is it?

Jade is a library created in an effort to create a simple way to create Json API server using doctrine entities. It supports all the CRUD functionality like filtering, sorting and including relationships. You just define the entities then using the configuration expose different routes.

It is done in a way to be easy to customize any part you need.

Another library?

Before starting developing this library we went through other available libraries even thinking about contributing to them. But the issue was that customizing those libraries to our needs was complicated and sometimes needed too much effort to even set it up. In case of Jade in 5 minutes you can have a fully functional API running.

Getting started

You can find a quick start example in docs/example.md

First install the library:

composer require trivago/jade

Next add the bundle to the kernel:


public function registerBundles()
        $bundles = [
            new Trivago\Jade\Application\Framework\JadeBundle\TrivagoJadeBundle(),

And then add the routing

    prefix: /api
    resource: .
    type: json_api

And then you have to setup the configuration.


Read it here

Example configuration

Read it here


Read it here

Loading the routes

Read it here


Read it here


Read it here


Read it here


Read it here

Example calls

Read it here

Security concerns

Read it here


Read it here

Missing features

  • Allow choosing which fields to be included.
  • Validate the request for extra keys that are not valid.
  • Create the relationship urls.
  • Contain for a path that is string works fine. Find a new filter type name for path being an array that contains value.
  • [IMPROVED] Use ResourceMapper to avoid filtering or sorting on columns that are not rendered [security]