¿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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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 usuario
POST
/register
- Iniciar sesión el usuario
POST
/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 usuario
POST
/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á CategoryResource
en el app\Http\Resources
directorio.
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://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á CategoryApiController
en el app\Http\Controllers\Api
directorio. 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 index
método devolverá todas las categorías envueltas dentro CategoryResource
.
El posts
mé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 CommentApiController
, PostApiController
, TagApiController
, y UserApiController
o repositorio de pago y envío.
Paso 3 : El último paso es crear rutas para la API. Proceder alroutes
directorio y abrir elapi.php
archivo 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')->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 serve
comando. 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 GET
solicitud ahttp://127.0.0.1:8000/api/categories
Ahora probemos authenticated route
tambié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
POST
solicitud ahttp://127.0.0.1:8000/api/comments/posts
- En
Authorization
la pestaña seleccioneType
comoBearer Token
y pegar elplainTextToken
enToken
cuadro de texto. - Luego en la
Headers
pestañaKey
comoAccept
yValue
comoapplication/json
. - Luego, en la
Body
pestaña, seleccioneform-data
el botón de radio yKey
, en ,Value
escribaid
–159
,comment
–Testing some comment on post 159
- Ahora presiona el
send
botón y obtendrás el comentario recién creado.
El código fuente está disponible en https://github.com/mdutt247/laravel-news para que te refieras.
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!
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!