A simple but yet powerful library to expose your entities through JSON API.
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Trivago/Jade
docs
test
.gitignore
LICENSE
README.md
composer.json
phpunit.xml.dist

README.md

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:

<?php

public function registerBundles()
{
        $bundles = [
            ...
            new Trivago\Jade\Application\Framework\JadeBundle\TrivagoJadeBundle(),
            ...
        ];
}

And then add the routing

json_api_routes:
    prefix: /api
    resource: .
    type: json_api

And then you have to setup the configuration.

Configuration

Read it here

Example configuration

Read it here

Entities

Read it here

Loading the routes

Read it here

Filtering

Read it here

Sorting

Read it here

Including

Read it here

Listeners

Read it here

Example calls

Read it here

Security concerns

Read it here

Tests

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]