symfony api rest bundle


librerias a instalar:

composer require friendsofsymfony/rest-bundle
composer require jms/serializer-bundle

habilitarlos:

new FOS\RestBundle\FOSRestBundle(),
new JMS\SerializerBundle\JMSSerializerBundle(),

para efectos de orden y no poner todo en el AppBundle voy a crear un bundle nuevo en donde manejare los controladores de la api

por consola:


php bin/console generate:bundle

llamemosle p.e ApiRestBundle

actualizar composer.json
en eclipse:

abrir composer.json ir a la pestaña de "autoload"
en el panel de psr-4 click en add ,
en el cuadro de dialogo
namespace: ApiRestBundle\ 
y en paths seleccionar el floder src/ApiRestBundle

luego por consola ejecutar:

composer dump-autoload

el comando de creacion de bundle
lo agrega automaticamente al AppKernel.php
y tambien genera una entrada en routing.yml

editemos el prefix en el routing, para que las llamadas sean precedidas por "api" entonces quedaria asi:

api_rest:
    resource: "@ApiRestBundle/Controller/"
    type:     annotation
    prefix:   /api


en config.yml


# JMS serializer configuration
jms_serializer:
    metadata:
        auto_detection: true
    handlers:
        datetime:
            default_format: 'Y-m-d H:i:s'

# FOSRest Configuration
fos_rest:
    body_listener: true
    format_listener:
        rules:
            - { path: '^/api', priorities: ['json'], fallback_format: json, prefer_extension: false }
            - { path: ^/, priorities: [ html ], fallback_format: html, prefer_extension: true }
    param_fetcher_listener: true
    view:
        view_response_listener: 'force'
        formats:
            json: true


se asume que se tiene ya una entidad creada en src/AppBundle/Entity
y su correspondiente repository en src/AppBundle/Repository

por ejemplo para Nota.php existe NotaRepository.php (que extiende de \Doctrine\ORM\EntityRepository)



en src/ApiRestBundle/Controller

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use FOS\RestBundle\Controller\FOSRestController;


use FOS\RestBundle\View\View;

class NotasController extends FOSRestController
{
     /**
     * @Route("/notas")
     * @Method("GET")
     */
    public function getAction()
    {
      $restresult = $this->getDoctrine()->getRepository('AppBundle:Nota')->findAll();
      if ($restresult === null)
        {
          return new View("there are no notas exist", Response::HTTP_NOT_FOUND);
      }
        return $restresult;
    }
 
}

y listo!

para probar, se puede abriri Postman

y en la url escribir:

http://localhost/api-test/web/app_dev.php/api/notas

deberia devolver algo asi:

[ { "id": 1, "titulo": "prueba", "contenido": "<p>lalalala</p>\r\n\r\n<p><strong>jojoj</strong></p>\r\n\r\n<p><strong>fefefe</strong></p>\r\n\r\n<ol>\r\n\t<li><strong>kakaka</strong></li>\r\n\t<li>huhuhuh</li>\r\n</ol>", "imagen": "24955519_922259481269966_842653723684610281_o.jpg", "esta_activo": true, "posicion": 2, "updated_at": "2017-12-14 04:10:23", "created_at": "2017-12-14 04:10:23" }, { "id": 2, "titulo": "otra prueba", "contenido": "<p>jajajaa</p>", "imagen": "160718114905-03-mind-of-bruce-lee-super-tease.jpg", "esta_activo": false, "posicion": 1, "updated_at": "2017-12-14 04:17:47", "created_at": "2017-12-14 04:17:47" } ]





fuentes:

http://www.phpbuilder.com/articles/tools/frameworks/creating-a-rest-api-in-symfony-3.html

https://jeremycurny.com/2016/03/27/symfony3-rest-api/

http://orgullo.users.sourceforge.net/blog/?p=406

https://www.cloudways.com/blog/rest-api-in-symfony-3-1/

ver

https://gist.github.com/diegonobre/341eb7b793fc841c0bba3f2b865b8d66

No hay comentarios:

Publicar un comentario

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable