Laravel API – Inicia tu API con Laravel 5.4

laravel api

Que es Laravel API

Bueno desde hace mucho he venido trabajando APIs en Laravel y he aprendido muchas cosas. Entre ellas es que no siempre es divertido hacer tanto trabajo repetitivo. Inicialmente cree un Starter Kit que es algo así como un punto de partida para un API en Laravel 5.1. Pero el framework ha avanzado bastante rápido así que tuve que actualizar a 5.4 y acá les voy a mostrar como usar Laravel API.

Instalación

Lo primero que debemos hacer es instalar el starter kit con composer de la siguiente forma

Esto va a descargar la version 2.0 que es la que está hecha con Laravel 5.4, probablemente te de un error cuando termine de instalar las dependencias de composer, si es así no te preocupes que es normal.

Una ves composer termine de instalar las dependencias vamos a correr una serie de comandos para instalar el API. Ingresando a la carpeta del proyecto correremos:

Modificamos el archivo .env con los datos de nuestra base de datos. (Ten en cuenta que debes crear la base de datos antes de hacer esto.

Ahora corremos las migraciones.

Necesitamos instalar Laravel Passport

Esto generará las llaves de encriptación y los clientes principales como se ve a continuación.

Ahora vamos a instalar el API como tal usando el siguiente comando

Este comando nos va a pedir que creemos un usuario administrador, esto es para poder ingresar a un pequeño portal de desarrollo que está en el kit. Desde este portal se podrán crear los clientes del API y ver la documentación del mismo.

Ahora debemos correr el instalador de dependencias de node ya sea NPM o Yarn, personalmente prefiero Yarn

Por último vamos a compilar los CSS y JS del proyecto, para esto estamos usando Laravel Mix

Lista la instalación!

Características del Kit

Ahora que ya tienes instalado el API Starter Kit esto es lo que obtienes:

A demás de esto, si ingresas al navegador después de publicar el proyecto en un servidor web verás una pantalla de login donde puedes ingresar las credenciales que colocamos en la instalación.

Al ingresar verás un menu con algunas opciones.

En API Documentation verás la documentación del API en API Blueprint compilado por Aglio

Y lo mejor de todo, tienes una suite de pruebas que te permite iniciar los features de tu API con el endpoint de users implementado y probado.

Esto ha sido una breve introducción a Laravel API starter kit. Espero les sea útil y recuerden que siempre se puede mejorar haciendo un Pull Request en el repositorio que puedes visitar en

https://github.com/joselfonseca/laravel-api

Feliz programación!

Comparte este artículo

Entra en la discusión y deja tu comentario

  • Andrew Quiros

    Excelente Aporte Jose, como siempre.
    Mil gracias.

  • Carlos Fernandes

    Que buen aporte Jose, muchas gracias por esta gran contribución.

  • Antonio Cuan

    Hola excelente aporte Jose , una duda me esta apareciendo el siguiente error cuando ejecuto
    php artisan app:install

    Error:
    PHP Parse error: syntax error, unexpected ‘:’, expecting ‘;’ or ‘{‘ in /var/www/html/new-api/app/Services/Users/UsersService.php on line 76

    que puediera estar haciendo mal ??

    • Antonio Cuan

      Hola Jose ya lo resolvi Gracias!!

      • Alvaro Neira Rojas

        Como resolviste el error?

        • sebastian

          la contraseña debe tener 8 caracteres

          • Luis Rodrigo Labra

            Aun no puedo resolver este error

          • Andres

            necesitas php7+ para trabajar en esto, usa php -v para verificar tu version de php.
            Si es tu caso, usa la ruta completa del bin:
            “/Applications/MAMP/bin/php/php7.1.0/bin/php” por ejemplo.

  • Moises Garduño

    Genial Jose un excelente aporte !!!

  • Johan Armando

    Genial aporte!.Pero una cosa jose, yo uso el patron repositorio para las consultas en la base de datos , veo que usas algo llamado servicios, no entiendo bien este concepto si quiesiera mas consultas aparte del crud basico como seria, en si no entiendo el concepto de servicios y para q dividirlos asi

    • Hola, El service class es una forma de encapsular lo que sea que quiero hacer con la entidad, es similar al Repositorio pero el tema con el repositorio es que no tiene mucho sentido trabajarlo con Active Record por que el modelo sabe como persistirse, esa es una discusión super larga que he tenido con varias personas y a la final va en gustos. Dentro del service no es necesario que solo halla crud, de hecho puede que un service no haga crud sino otra cosa con la entidad. Para casos mas complejos tenemos el Command Bus usando Laravel Tactician y middleware. Son muchas las posibilidades, obviamente el starter kit lo puedes cambiar como quieras una vez esté instalado, pero a travez del tiempo que llevo trabajando con esto me he dado cuenta que es o ha sido la mejor manera para no hacer tanta cosa pero igual mantener el controlador limpio. Como todo depende del caso de uso. Yo tengo casos donde los services son CRUDS y otros son una forma de despachar comandos para algo mas complejo, he llegado a usar muchos Middleware en el command para transformar el comando antes de entregarlo al handler e incluso para validar, calcular, cachear ETC. acá un ejemplo super minimal de como se ha usado https://gist.github.com/joselfonseca/24ee0e96666a06b16f92 Como le digo hay demasiado que evaluar dependiendo del caso de uso. No siempre uso command bus pero últimamente si uso mucho los Services.

  • Alvaro Neira Rojas

    Excelente aporte, pero al ejecutar php artisan app:install me da el siguiente error

    Error:
    PHP Parse error: syntax error, unexpected ‘:’, expecting ‘;’ or ‘{‘ in /var/www/html/new-api/app/Services/Users/UsersService.php on line 76

    • Elias González

      pudiste resolverlo?

      • Luis Rodrigo Labra

        Alguien ha podido resolver este problema

  • Ronny Arvelo

    Hola, está bastante interesante la documentación del API, los endpoints van generando automáticamente un nuevo apartado en la documentación o el proceso sigue siendo totalmente manual? Saludos!!

  • Johan Armando

    Hola jose! una pregunta se quee hay tipos de tokens o tipos de autenticacion, que tipo se usa en una aplicacion front-end ya que los datos o credenciales en este quedan visibles y puede ser peligroso, otra pregunta mas el authotization code cuando se debe usar gracias

    • Hola,

      Pues se utiliza normalmente un JWT o JSON web Token https://laraveles.com/que-es-en-realidad-jwt/ que es el estándar para pasar información JSON de un lado a otro. Al igual que las cookies los tokens también son visibles así que es como lo mismo, lo importante es que los token se expiren cada cierto tiempo para que sean invalidados.

      El authorization grant usualmente se usa cuando le damos la facultad a otra aplicación de autenticarse con nuestro sistema tipo Facebook Connect.

      Saludos!

      • Johan Armando

        Te entiendo, otra pregunta jose, cuando quiero crear un recurso que tiene relaciones
        ejemplo un producto que posee una categoria, se envia en el payload del post a una url /products o recomiendas una url nested, es que no se que en momentos es recomendable usar estas urls ejemplo /categories/:id/products/:id , se mi aclaras eso seria de gran ayuda gracias.

  • Walvin Man

    Hola como estas saludos, estoy intentando instalar y cuando corro

    php artisan app:install me envia este error:
    [SymfonyComponentDebugExceptionFatalErrorException]
    syntax error, unexpected ‘:’, expecting ‘;’ or ‘{‘

    • Elias González

      igual a mi

  • miguel

    buenas este comando php artisan app:install no me lo reconoce. Por favor espero por su ayuda

    • Freddy Johanes Vargas Ramirez

      Buenas, escribe el siguiente comando php artisan, si el comando solicitado no aparece dentro de ese listado es porque te volaste algún paso, te falto importar algún provider.

  • Carlos Díaz

    que es eso de “touch” ni php ni composer me lo reconocen. Como hago eso? gracias

    • Gonzalo Nandez

      “touch” es un comando del terminal del mac para crear archivos vacios

  • Luis Rodrigo Labra

    Alguien ha podido resolver este error Error:
    PHP Parse error: syntax error, unexpected ‘:’, expecting ‘;’ or ‘{‘ in /var/www/html/new-api/app/Services/Users/UsersService.php on line 76

  • Daiber Gonzalez

    Buenas noches, tengo el siguiente error al tratar de crear mi usuario administrador…
    [IlluminateDatabaseQueryException]
    SQLSTATE[22P02]: Invalid text representation: 7 ERROR: la sintaxis de entrada no es válida para el tipo uuid: «Adm
    inistrator» (SQL: select * from “roles” where “name” = Administrator or “uuid” = Administrator limit 1)

    [PDOException]
    SQLSTATE[22P02]: Invalid text representation: 7 ERROR: la sintaxis de entrada no es válida para el tipo uuid: «Adm
    inistrator»

    Alguien sabe como solucionarlo, revise la tabla roles y no tiene datos, si trato de insertarle no da, por el tipo de dato uuid, que desconocía hasta el día de hoy, logre insertarle 1 registro con el nombre Administrador, pero igual sale el error.

    • Alex Riios Cardoza

      Lo resolví comentando solo :TrasformertAbstract en la linea 76 de UserService.php,

      public function setTransformer() //: TransformerAbstract

  • omar lee

    Para Aquellos que tiene el problema del UsersService.ph
    solo tienen que tener PHP7 instalado.

    y aquellos que tuvieron problemas con la migración se soluciona colocando

    Schema::defaultStringLength(191).

    Quisiera saber si alquilen sabe si el Sr. Jose tiene algún vídeo del API. de como utilizarlo mas afondo?

    • Hola, Gracias por postear, uno de los requisitos es que el server tenga PHP 7, ese reuisito ya se ha agregado al composer.json en la última version. En cuanto al video estoy preparando un material, he tenido mucho trabajo y no he podido retomar el tema de Laraveles. Pero ya pronto regreso!

      • omar lee

        Gracias a usted Maestro,
        Sigo su trabajo me gusta mucho los aportes que hace a la comunidad.

  • M165437

    Publiqué un paquete para compilar API Blueprint directamente por Laravel, personalizable con Blade. https://github.com/M165437/laravel-blueprint-docs

  • Jose, segui todos los pasos que indicas en el articulo, intente varias veces, pero al ingresar a la url del sitio este esta cargando la documentacion. Si intento acceder a, por ejemplo, localhost/api, me devuelve una trama json con un nodo indicando estado 404.
    Sabes que pueda ser?

  • José Parra

    Hola, noté que en las nuevas versiones del paquete quitaron la integración con laravel-api-tools y con laravel-tactician, ¿Lo hicieron por alguna razón desfavorable? ¿Se puede usar todavía sin problemas? Aprovecho para agradecer por este maravilloso paquete realmente me ha facilitado bastante la vida sobre todo porque me dedico mas que todo a hacer API REST

  • Crislin Nuñez

    Es posible configurar Laravel-API con una DB externa a la que solo se tenga permisos de lectura?

Veces