API RESTful con el Framework Laravel

API RESTful con el Framework Laravel

¿Qué es API?

La sigla API significa: Application Programming Interface, es una interfaz informática que define las interacciones entre los 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 RE presentational S tate T ransfer. 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. Almacenable 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 los datos de la 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 de 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 se deben implementar previamente.

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

Relacionados con la categoría:

  • Obtener todas las categorías GET /categories
  • Obtener todas las publicaciones de una categoría GET /categories/{id}/posts
  • Obtener todas las publicaciones GET /posts
  • Obtener una publicación por identificación GET /posts/{id}
  • Obtener todos los comentarios de una publicación GET /posts/{id}/comments
  • 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
  • Obtener todas las publicaciones de una etiqueta GET /tags/{id}/posts
  • Registrar un usuarioPOST /register
  • Iniciar sesión el usuarioPOST /login
  • Se te olvidó tu contraseña POST /forgot-password

Relacionado con el comentario:

  • Comentario del usuario de la tienda POST /comments/posts/{id}
  • Cerrar la sesión del usuarioPOST /logout
  • Actualiza contraseña POST /update-password

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 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 expresiva y sencilla sus modelos y colecciones de modelos en JSON.

Ejecute el comando php artisan make:resource CategoryResource. Se creará CategoryResourceen el app\Http\Resourcesdirectorio.

Abra este archivo y devuelva los datos deseados, por ejemplo. category_iden 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://ingenierofernandoperez.com"
    ];
}

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. Se creará CategoryApiControlleren el app\Http\Controllers\Apidirectorio. 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);
}

El indexmétodo devolverá todas las categorías envueltas dentro CategoryResource.

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

De la misma manera a crear los métodos deseados en CommentApiControllerPostApiControllerTagApiController, y UserApiControllero repositorio de pago y envío.

Paso 3 : El último paso es crear rutas para la API. Proceder alroutesdirectorio y abrir elapi.phparchivo y crear los puntos finales de API que hará referencia a los métodos creados enCategoryApiController,CommentApiController,PostApiController,TagApiController, yUserApiController.

<?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')-&gt;group(function () {
Route::post('comments/posts', [CommentApiController::class, 'store']);
Route::post('logout', [UserApiController::class, 'logout']);
Route::post('update-password',[UserApiController::class, 'updatePassword']);
});

Inicie la base de datos y ejecute el php artisan servecomando. El servidor de desarrollo de Laravel se iniciará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 GETsolicitud ahttp://127.0.0.1:8000/api/categories

Respuesta de devolución de API RESTful

Ahora probemos authenticated routetambién. Solo hay una ruta autenticada para almacenar comentarios de usuarios registrados 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 usa el createToken()método.

Copiar plainTextToken, para usar en Postman.

Ahora abra Postman y haga lo siguiente:

  • Nueva POSTsolicitud ahttp://127.0.0.1:8000/api/comments/posts
  • En Authorizationla pestaña seleccione Typecomo Bearer Tokeny pegar el plainTextTokenen Tokencuadro de texto.
  • Luego en la Headerspestaña Keycomo AcceptValuecomo application/json.
  • Luego, en la Bodypestaña, seleccione form-datael botón de radio y Key, en , Valueescriba id– 159commentTesting some comment on post 159
  • Ahora presiona el sendbotón y obtendrás el comentario recién creado.

Tipo de autorización: token de portador
Encabezado – Aceptar – aplicación / json
Cuerpo – formulario-datos
Respuesta exitosa después de insertar un comentario

El código fuente está disponible en https://github.com/mdutt247/laravel-news para que te refieras.

2 comentarios de “API RESTful con el Framework Laravel

  1. googletest dice:

    It is perfect time to make a few plans for the long run and
    it’s time to be happy. I’ve learn this submit and if I
    may I wish to suggest you few interesting things or tips. Perhaps you
    can write subsequent articles relating to this article. I want to read more things about it!

  2. Hockey Jargon dice:

    Hi, I think your website might be having browser compatibility
    issues. When I look at your website in Opera, it looks fine
    but when opening in Internet Explorer, it has some
    overlapping. I just wanted to give you a quick heads up!

    Other then that, great blog!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Nuestro equipo de atención al cliente está aquí para responder a tus preguntas. ¡Pregúntanos cualquier cosa!
Este sitio utiliza cookies para ofrecerle una mejor experiencia de navegación. Al navegar por este sitio web, acepta nuestro uso de cookies.