RESTful API: Creando y consumiendo

RESTful

Creando y consumiendo API RESTful en Laravel

RESTful API

¿Qué es API?

Una API – Interfaz de programación de aplicaciones, es una interfaz informática que define las interacciones entre múltiples intermediarios de software. Es una forma de interactuar mediante programación con un componente o recurso de software independiente.

¿Qué es REST?

REST es un acrónimo de REpresentational State Transfer. Este término fue acuñado por Roy Fielding en 2000. Es un estilo de arquitectura para el diseño de aplicaciones poco acopladas a través de HTTP, que se utiliza a menudo en el desarrollo de servicios web.


REST define 6 restricciones arquitectónicas que hacen de cualquier servicio web una verdadera API RESTful.

  1. Cliente-servidor: al separar la interfaz de usuario del almacenamiento de datos, mejoramos la portabilidad de la interfaz de usuario en múltiples plataformas y mejoramos la escalabilidad al simplificar los componentes del servidor.
  2. Sin estado: cada solicitud del cliente al servidor debe contener toda la información necesaria para comprender la solicitud y no puede aprovechar ningún contexto almacenado en el servidor. Por lo tanto, el estado de la sesión se mantiene completamente en el cliente.
  3. Cacheable (Se puede almacenar en caché): las restricciones de caché requieren que los datos dentro de una respuesta a una solicitud se etiqueten implícita o explícitamente como almacenables en caché o no almacenables en caché. Si una respuesta se puede almacenar en caché, la caché de un cliente tiene derecho a reutilizar esos datos de respuesta para solicitudes posteriores equivalentes.
  4. Interfaz uniforme: al aplicar el principio de generalidad a la interfaz del componente, se simplifica la arquitectura general del sistema y se mejora la visibilidad de las interacciones.
  5. Sistema en capas: el estilo del sistema en capas permite que una arquitectura se componga de capas jerárquicas al restringir el comportamiento de los componentes de manera que cada componente no pueda “ver” más allá de la capa inmediata con la que están interactuando.
  6. Código a pedido (opcional): REST permite ampliar la funcionalidad del cliente descargando y ejecutando código en forma de subprogramas o scripts. Esto simplifica a los clientes al reducir la cantidad de funciones que deben implementarse previamente.

Ahora pasemos a crear y consumir API RESTful en Laravel.

Los consumidores de nuestra API podrán realizar algunas tareas limitadas. Habría los siguientes puntos finales:

Puntos finales de API para la ruta no autenticada

Relacionado con la categoría:

  • Obtener todas las categorías GET /categories
  • Obtener todas las publicaciones de una categoría GET /categories/{id}/posts

Relacionado con la publicación:

  • Obtener todas las publicacione GET /posts
  • Obtener una publicación por ID GET /posts/{id}
  • Obtener todos los comentarios de una publicación GET /posts/{id}/comments

Relacionado con el autor:

  • Obtener detalles de un autor GET /authors/{id}
  • Obtener todas las publicaciones de un autor GET /authors/posts
  • Obtener todos los comentarios de un autor GET /authors/{id}/comments

Relacionado con la etiqueta:

  • Obtener todas las publicaciones de una etiqueta GET /tags/{id}/posts

Relacionado con la autenticación:

  • Registrar un usuario POST /register
  • Iniciar sesión el usuario POST /login
  • Contraseña olvidada POST /forgot-password

Punto final de API para la ruta autenticada

Relacionado con el comentario:

  • Almacenar el comentario del usuario POST /comments/posts/{id}

Relacionado con la autenticación:

  • Cerrar sesión del usuarior POST /logout
  • Actualizar contraseña POST /update-password

Verifique los detalles de la colección de API anterior en https://documenter.getpostman.com/view/8942795/TVmJhJv2.

Debe crear recursos de API, controladores y rutas de API para los puntos finales de API mencionados anteriormente.


Paso 1: primero creemos recursos de API. Para hacerlo, siga los pasos que se mencionan a continuación (no olvide implementar la parte de migración y relación):

 

Al crear una API, es posible que necesite una capa de transformación que se encuentre entre sus modelos Eloquent y las respuestas JSON que realmente se devuelven a los usuarios de su aplicación. Las clases de recursos de Laravel le permiten transformar de manera fácil y expresiva sus modelos y colecciones de modelos en JSON.

 

Ejecute el comando php artisan make:resource CategoryResource. Creará CategoryResource en el directorio app\Http\Resources.

Abra este archivo y devuelva los datos deseados, por ejemplo. category_id en lugar de id. Puede hacer mucho más que enmascarar los nombres de los campos o la cantidad de campos que se devolverán, como podemos devolver información adicional con API, etc.

public function toArray($request)
{
 return [
  'category_id' => $this->id,
  'category_title' => $this->title,
  'category_color' => $this->color,
 ];
}// (Optional) Additional code is attached to the response
public function with($request){
 return [
  'version' => "1.0.0",
  'author_url' => "https://mditech.net"
 ];
}

De la misma manera, debe crear otros recursos necesarios: CommentResourcePostResourceTagResourceUserResourceImageResource, y VideoResource. Cree estos recursos o extráigalos del repositorio.


Paso 2: la siguiente actividad es crear los controladores necesarios. Para hacerlo, siga los pasos a continuación:

Ejecute el comando php artisan make:controller Api\\CategoryApiController. Creará CategoryApiController en el directorio app\Http\Controllers\Api. Abra ese archivo y escriba los métodos para realizar acciones.

public function index()
{
 $categories = Category::all();
 return CategoryResource::collection($categories);
}public function posts($id)
{
 $posts = Post::where('category_id', $id)->orderBy('id', 'desc')->paginate();
 return PostResource::collection($posts);
}

Aquí creó dos índices de métodos y publicaciones dentro de CategoryApiController.

El método de index devolverá todas las categorías incluidas dentro de CategoryResource.

El método de posts devolverá todas las publicaciones que pertenecen a una categoría específica dentro de PostResource.

De la misma manera, creamos los métodos deseados enn CommentApiControllerPostApiControllerTagApiControllerUserApiController o en el repositorio de pago.


Paso 3: El último paso es crear rutas para la API. Vaya al directorio de routes, abra el archivo api.php y cree los puntos finales de la API que harán referencia a los métodos creados en CategoryApiControllerCommentApiControllerPostApiControllerTagApiController y UserApiController.

<?php
use App\Http\Controllers\Api\CategoryApiController;
use App\Http\Controllers\Api\CommentApiController;
use App\Http\Controllers\Api\PostApiController;
use App\Http\Controllers\Api\TagApiController;
use App\Http\Controllers\Api\UserApiController;
use Illuminate\Support\Facades\Route;Route::post('registration', [UserApiController::class, 'store']);
Route::post('login', [UserApiController::class, 'login']);
Route::post('forgot-password', [UserApiController::class, 'forgotPassword']);Route::get('authors/{id}', [UserApiController::class, 'show']);
Route::get('authors/{id}/posts', [UserApiController::class, 'posts']);
Route::get('authors/{id}/comments', [UserApiController::class, 'comments']);Route::get('categories', [CategoryApiController::class, 'index']);
Route::get('categories/{id}/posts', [CategoryApiController::class, 'posts']);Route::get('posts', [PostApiController::class, 'index']);
Route::get('posts/{id}', [PostApiController::class, 'show']);
Route::get('posts/{id}/comments', [PostApiController::class, 'comments']);Route::get('tags/{id}/posts', [TagApiController::class, 'posts']);Route::middleware('auth:sanctum')->group(function () {
Route::post('comments/posts', [CommentApiController::class, 'store']);
Route::post('logout', [UserApiController::class, 'logout']);
Route::post('update-password',[UserApiController::class, 'updatePassword']);
});

Prueba de los puntos finales de la API

Inicie la base de datos y ejecute el comando php artisan serve. El servidor de desarrollo de Laravel se iniciará en http://127.0.0.1:8000

Abra Postman y pruebe todas las rutas definidas en api.php, pero asegúrese de agregar su ruta con /api/

Para obtener todas las categorías, debe enviar una solicitud GEThttp://127.0.0.1:8000/api/categories

RESTful
RESTful API Returning Response

Ahora probemos también la authenticated route. Solo hay una ruta autenticada para almacenar el comentario de un usuario que inició sesión en una publicación.

Estamos utilizando Laravel Sanctum para autenticación y autorización. Emitiremos un token de API y lo usaremos en Postman para autenticar la solicitud.

Laravel Sanctum proporciona un sistema de autenticación ligero para SPA (aplicaciones de una sola página), aplicaciones móviles y API simples basadas en tokens. Sanctum permite que cada usuario de su aplicación genere múltiples tokens API para su cuenta. A estos tokens se les pueden otorgar habilidades / alcances que especifican qué acciones pueden realizar los tokens.

Para utilizar un token de API, ejecutaremos el comando tinker

php artisan tinker

Ahora nos permitirá interactuar con la aplicación Laravel desde la línea de comandos. Aquí debe crear un token de API para un usuario que use el método createToken().

RESTful
Generar token de acceso

Copie plainTextToken, que se utilizará en Postman.

Ahora abra Postman y haga lo siguiente:

  • Nueva solicitud POSThttp://127.0.0.1:8000/api/comments/posts
  • En la pestaña Authorization, seleccione Type como Bearer Token pegue el plainTextToken en el cuadro de texto Token.
  • Luego, en la pestaña HeadersKey, AcceptValue como application/json.
  • Luego, en la pestaña Body, seleccione el botón de opción de form-data y KeyValue escriba id — 159comment — Testing some comment on post 159
  • Ahora presiona el botón send y obtendrás el comentario recién creado.

RESTful
Tipo de autorización: token de portador

RESTful
Encabezado – Aceptar – aplicación / json

Cuerpo – formulario-datos

RESTful
Respuesta exitosa después de insertar un comentario


En este artículo, hemos podido construir y consumir (el consumidor era Postman) RESTful API usando Laravel. Cubrimos la creación de recursos de API, la creación de controladores de API y probamos rutas de API autenticadas y no autenticadas.

Recent Post