Skip to content

GuguRD/symfony-rest-bundle

 
 

Repository files navigation

Symfony REST Framework

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.

Documentation

  1. Generated API.
  2. Creating rest controller.

About

RESTful API autogenerated from Symfony+Doctrine entities

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 100.0%