eyja / rest-bundle
Framework for creating REST APIs using Doctrine entities
Installs: 345
Dependents: 1
Suggesters: 0
Security: 0
Stars: 8
Watchers: 1
Forks: 4
Open Issues: 13
pkg:composer/eyja/rest-bundle
Requires
- php: >=5.3.2
- jms/serializer-bundle: dev-master as 0.11.x-dev
- symfony/symfony: >=2.3
This package is not auto-updated.
Last update: 2025-12-15 19:46:12 UTC
README
Work in progress
TLDR; RESTful API autogenerated from Symfony+Doctrine entities. Go to docs to see how it looks like.
Setup
To get started, install this bundle in your Symfony project, and register it in AppKernel.
composer require eyja/rest-bundle dev-master
# /app/AppKernel.php
new Eyja\RestBundle\EyjaRestBundle()
Minimal example
Create new bundle for Your REST API:
php app/console generate:bundle \
--no-interaction --namespace=Acme/RestBundle --dir=src --format=yml
Change autogenerated routing definition for new bundle to look something like this:
# app/config/routing.yml
acme_rest:
prefix: /api/v1/
resource: @AcmeRestBundle/Resources/config/routing.yml
type: rest
Create new doctrine entitiy:
php app/console generate:doctrine:entity \
--no-interaction --entity=AcmeRestBundle:Cat \
--fields="name:string(100)" --format=yml
php app/console doctrine:schema:update --force
Define serialization for this entity:
# src/Acme/RestBundle/Resources/serializer/Entity.Cat.yml Acme\RestBundle\Entity\Cat: properties: id: type: integer groups: [collection, single] name: type: string groups: [collection, single]
Create simplest controller ever, no class required just service:
# src/Acme/RestBundle/Resources/config/services.yml services: acme_rest.controller.cat: parent: eyja_rest.abstract_controller arguments: [AcmeRestBundle:Cat, cat] tags: [ { name: rest.controller } ]
Viola! You can use your new api:
php app/console router:debug
rest_cat_getSingle GET ANY ANY /api/v1/cat/{id}
rest_cat_getCollection GET ANY ANY /api/v1/cat
rest_cat_create POST ANY ANY /api/v1/cat
rest_cat_update PUT ANY ANY /api/v1/cat/{id}
rest_cat_delete DELETE ANY ANY /api/v1/cat/{id}
curl -XPOST http://localhost/app_dev.php/cat -HContent-Type:\ application/json \
-d'{"name":"Lucifer"}'
{"id":1,"name":"Lucifer"}
curl -XGET http://localhost/app_dev.php/cat/1
{"id":1,"name":"Lucifer"}
curl -XPUT http://localhost/app_dev.php/cat/1 -HContent-Type:\ application/json \
-d'{"name":"Lucifer -.-"}'
{"id":1,"name":"Lucifer -.-"}
curl -XGET http://localhost/app_dev.php/cat
{"results":[{"id":1,"name":"Lucifer"}],"_metadata":{"limit":20,"offset":0,"total":1}}
curl -XDELETE http://localhost/app_dev.php/cat/1
# Empty response, http status code 204
Larger example
To see more complex example see demo bundle, featuring custom routes and advanced serialization.