Facebook, Google, Github, Netflix y algunos otros gigantes tecnológicos han dado la oportunidad a los desarrolladores y productos de consumir sus datos a través de API y se han convertido en una plataforma para ellos. Incluso si no está escribiendo API para otros desarrolladores y productos, es siempre es muy saludable para su aplicación tener API bellamente diseñadas.
Hay un largo debate en Internet sobre las mejores formas de diseñar las API, y es uno de los más matizados. No hay lineamientos oficiales definidos para el mismo.
La API es una interfaz a través de la cual muchos desarrolladores interactúan con los datos. Una API bien diseñada siempre es muy fácil de usar y facilita mucho la vida del desarrollador. La API es la GUI para los desarrolladores, si es confusa o no detallada, entonces el desarrollador comenzará a buscar alternativas o dejará de usarla. La experiencia de los desarrolladores es la métrica más importante para medir la calidad de las API.
La API es como un artista actuando en el escenario, y sus usuarios son la audiencia
Los siguientes son los términos más importantes relacionados con las API REST
Escribamos algunas API para empresas que tienen algunos empleados, para comprender más. /getAllEmployees
es una API que responderá con la lista de empleados. Algunas API más alrededor de una empresa se verán de la siguiente manera:
_/addNewEmployee_
_/updateEmployee_
_/deleteEmployee_
_/deleteAllEmployees_
_/promoteEmployee_
_/promoteAllEmployees_
Y habrá toneladas de otros puntos finales de API como estos para diferentes operaciones. Todos ellos contendrán muchas acciones redundantes. Por lo tanto, sería complicado mantener todos estos puntos finales de API cuando aumenta el número de API.
**¿Qué está mal?**La URL solo debe contener recursos (sustantivos), no acciones ni verbos. La ruta de la API /addNewEmployee
contiene la acción addNew
junto con el nombre del recurso Employee
.
**Entonces, ¿cuál es la forma correcta?** /companies
endpoint es un buen ejemplo, que no contiene ninguna acción. Pero la pregunta es cómo le informamos al servidor sobre las acciones que se realizarán en los recursos de companies
, a saber. ya sea para agregar, eliminar o actualizar?
Aquí es donde los métodos HTTP (GET, POST, DELETE, PUT), también llamados verbos, juegan un papel.
El recurso siempre debe estar en plural en el extremo de la API y si queremos acceder a una instancia del recurso, siempre podemos pasar la identificación en la URL.
GET
path /companies
debe obtener la lista de todas las empresasGET
ruta /companies/34
debe obtener los detalles de la empresa 34DELETE
ruta /companies/34
debe eliminar la empresa 34En algunos otros casos de uso, si tenemos recursos bajo un recurso, por ejemplo, empleados de una empresa, algunos de los puntos finales de la API de muestra serían:
GET /companies/3/employees
debe obtener la lista de todos los empleados de la empresa 3GET /companies/3/employees/45
debe obtener los detalles del empleado 45, que pertenece a la empresa 3DELETE /companies/3/employees/45
debe eliminar al empleado 45, que pertenece a la empresa 3POST /companies
debe crear una nueva empresa y devolver los detalles de la nueva empresa creada¿No son las API ahora más precisas y consistentes? 😎
Conclusión: las rutas deben contener la forma plural de recursos y el método HTTP debe definir el tipo de acción que se realizará en el recurso.
HTTP ha definido algunos conjuntos de métodos que indican el tipo de acción que se realizará en los recursos.
La URL es una oración, donde los recursos son sustantivos y los métodos HTTP son verbos.
Los métodos HTTP importantes son los siguientes:
El método GET
solicita datos del recurso y no debería producir ningún efecto secundario. Por ejemplo /companies/3/employees
devuelve la lista de todos los empleados de la empresa 3.
El método POST
solicita al servidor que cree un recurso en la base de datos, principalmente cuando se envía un formulario web. Por ejemplo /companies/3/employees
crea un nuevo empleado de la empresa 3. POST
no es idempotente , lo que significa que múltiples solicitudes tendrán diferentes efectos.
El método PUT
solicita al servidor que actualice el recurso o cree el recurso, si no existe. Por ejemplo /companies/3/employees/john
solicitará al servidor que actualice o cree, si no existe, el recurso john en la colección de empleados bajo la compañía 3. PUT
es idempotente , lo que significa que varias solicitudes tendrán los mismos efectos.
El método DELETE
solicita que los recursos, o su instancia, se eliminen de la base de datos. Por ejemplo, /companies/3/employees/john/
solicitará al servidor que elimine el recurso john de la colección de empleados en la empresa 3.
Hay algunos otros métodos que discutiremos en otra publicación.
Cuando el cliente envía una solicitud al servidor a través de una API, el cliente debe conocer los comentarios, si falló, pasó o si la solicitud fue incorrecta. Los códigos de estado HTTP son un montón de códigos estandarizados que tienen varias explicaciones en varios escenarios. El servidor siempre debe devolver el código de estado correcto. Las siguientes son las categorizaciones importantes de los códigos HTTP:
Estos códigos de estado representan que el servidor recibió y procesó correctamente la acción solicitada.
204 Sin contenido representa que la solicitud se procesó con éxito, pero no ha devuelto ningún contenido. ELIMINAR puede ser un buen ejemplo de esto. La API DELETE /companies/43/employees/2
eliminará el empleado 2 y, a cambio, no necesitamos ningún datos en el cuerpo de respuesta de la API, ya que le pedimos explícitamente al sistema que los elimine. Si hay algún error, como si employee 2
no existe en la base de datos, entonces el código de respuesta no sería de la 2xx Success Category
sino de la 4xx Client Error category
.
Estos códigos de estado representan que el cliente ha realizado una solicitud defectuosa.
Puede seguir cualquier convención de mayúsculas y minúsculas, pero asegúrese de que sea coherente en toda la aplicación. Si el cuerpo de la solicitud o el tipo de respuesta es JSON , siga camelCase para mantener la coherencia.
Todas estas acciones son simplemente la consulta en un conjunto de datos. No habrá un nuevo conjunto de API para manejar estas acciones. Necesitamos agregar los parámetros de consulta con la API del método GET. Comprendamos con algunos ejemplos cómo implementar estas acciones.
Clasificación En caso de que el cliente desee obtener la lista ordenada de empresas, el extremo GET /companies
debe aceptar varios parámetros de clasificación en la consulta. Por ejemplo GET /companies?sort=rank_asc
clasificaría las empresas por su rango en orden ascendente.
Filtrado Para filtrar el conjunto de datos, podemos pasar varias opciones a través de los parámetros de consulta. Por ejemplo GET /companies?category=banking&location=india
filtraría los datos de la lista de empresas con la categoría de empresa de Banking y donde la ubicación es India.
GET /companies?search=Digital Mckinsey
GET /companies?page=23
significa obtener la lista de empresas en la página 23. Si agregar muchos parámetros de consulta en los métodos GET hace que el URI sea demasiado largo, el servidor puede responder con un estado HTTP 414 URI Too long
; en esos casos, los parámetros también se pueden pasar en el cuerpo de la solicitud del método POST
.
Cuando sus API están siendo consumidas por el mundo, actualizar las API con algún cambio importante también conduciría a romper los productos o servicios existentes que usan sus API.
http://api.yourservice.com/v1/companies/34/employees
es un buen ejemplo, que tiene el número de versión de la API en la ruta. Si hay alguna actualización importante, podemos nombrar el nuevo conjunto de API como v2
o v1.xx
Estas pautas se compilan en mi experiencia de desarrollo. Me encantaría conocer sus puntos de vista sobre los puntos mencionados anteriormente. ¡Por favor, deja un comentario y hazme saber!
Si este artículo te ayudó, entonces puedes invitarme a un café 😊