20
meetups
716
api addicts
16.000
visualizations
9K
3K
2K
Since two years ago we are speaking about apis under 360 vision. We have done 20 meetups, we have more than 16000 visualizations and we have 716 api addicts
/[email protected]
{ “name”:”Omar del Valle Rodríguez”,
“positions”: [ “Avanade Sr. Consultant” , “ApiAddicts”, “MCT” ] }
Sobre “yo”
@omarvr72
Introducción
REST: Es un estilo arquitectónico
RESTful: Se refiere a servicios web desarrollados con arquitectura REST
¿API REST o API RESTful?
VS
VS
Usar ASP.NET Web API no significa que estemos creando APIs RESTful, igual que programar en un lenguaje orientado a objetos no significa que estemos programando orientado a objetos.
La popularidad de las APIs ha hecho que se confundan términos. Muchas veces escuchamos decir: “Si tu API no cumple las restricciones impuestas por RESTful, entonces es un API REST. Esto es incorrecto, ya que REST se refiere a la arquitectura en sí, no a un framework de desarrollo. RESTful simplemente describe aquellas aplicaciones que cumplen con los requerimientos de una arquitectura REST
Arquitectura REST
Cliente - Servidor
Sin estado (Idempotente)
Caché (por petición)
Interfaz uniforme (verbos + recursos)
Separación en capas físicas (desconocimiento)
Código bajo demanda (opcional)
Restricciones
Restricciones de la arquitectura REST. Violar cualquiera de las primeras 5, implica que nuestra API ya no es cumple con la arquitectura REST, y por lo tanto no es RESTful.
ASP.NET Web API
Ciclo de vida completo:
https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf
ASP.NET Web API es un framework que nos permite construir servicios HTTP para un gran número de clientes
Server
HTTP Message Handlers
Podemos abortar el ciclo de ejecución
Controller
Podemos abortar el ciclo de ejecución
Model Binding
Result Conversion
Request
Response
Resumen del ciclo de vida de una petición HTTP en una aplicación ASP.NET Web API. Para información más ampliada, visitar https://www.asp.net/media/4071077/aspnet-web-api-poster.pdf
ASP.NET Web API
HTTP Message Handlers && Controller (Filters)
EJEMPLOS
1- ASP.NET.ApiAddits.MessagesHandler
2- ASP.NET.ApiAddits.Filters
ASP.NET Web API
Interactuando con Recursos
GET
POST
GET
DELETE
PUT
PATCH
(student)
(student)
(partial student)
api/students
api/students/1
get students
post student
get student
delete student
update student
update student (partial)
Ok(students)
Created(student)
Ok(student)
void || NoContent
Ok(student)
Ok(students)
El trabajo sobre colecciones (api/students) podría incluir PUT y DELETE para soportar comportamiento relacionado a reemplazar o eliminar toda la colección. Por el riesgo que conlleva, normalmente las APIs evitan este comportamiento y retornan un 404 (Not Allowed)
ASP.NET Web API
HTTP Status code
POST: 201 (creado), 400 (peticón incorrecta), 500 (error en el servidor)
GET: 200 (ok), 404 (no encontrado), 400, 500
DELETE: 204 (sin contenido), 404, 400, 500
PUT: 200, 404, 400, 500
PATCH: 200, 404, 400, 500
Generales: 401 (no autorizado), 403 (acceso denegado), 405 (método no permitido)
200: Ok(), Ok(T)
201: Created(location, T)
204: public void Delete(...)
400: BadRequest(), BadRequest(message), BadRequest(modelState)
404: NotFound()
500: InternalServerError(), InternalServerError(exception), NotImplementedException()
405: Método no permitido (Build in)
Otros: StatusCode(httpStatusCode), HttpResponseMessage(...)
Representación de los HTTP Status con los ActionResult correspondientes en Web API
ASP.NET Web API
Interactuando con recursos y cumpliendo restricciones
EJEMPLO
1- ASP.NET.ApiAddits.BasicContrains
ASP.NET Web API
Algunas consideraciones sobre PATCH
Actualizaciones parciales con JavaScript Object Notation (JSON) Patch
https://tools.ietf.org/html/rfc6902
JsonPatchDocument: Describe una secuencia de operaciones a realizar sobre un documento json.
[ { "op": "remove", "path": "/a/b/c" }, { "op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ] }, { "op": "replace", "path": "/a/b/c", "value": 42 }, { "op": "move", "from": "/a/b/c", "path": "/a/b/d" }, { "op": "copy", "from": "/a/b/d", "path": "/a/b/e" } ]
NuGet package: Marvin.JsonPatch
Content-Type: application/json-patch+json
ASP.NET Web API
Cumpliendo más restricciones
Relacionando recursos
api/courses
api/courses/{id}
api/courses/{id}/students
api/courses/{id}/students/{student}
Paginado
https://tools.ietf.org/html/rfc5988#page-6
NuGet package: WebApi.LinkHeader
Ordenar, filtrar y seleccionar resultados dinámicamente
NuGet package: System.Linq.Dynamic
ASP.NET Web API
Nuestra API es RESTful
Versionado
Rutas
https://github.com/Microsoft/aspnet-api-versioning
Cache
Respetar estándares
Pragma = no-cache
Cache-Control
Expires
https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Cache a nivel de cliente/servidor
Seguridad
Authorization Basic 8ujhjkh787yhjhghg=
Github :-(
ASP.NET Web API
Siguiente nivel: Microservicios
¿Preguntas?
Código fuente: https://github.com/odelvalle/Web-API---Apiaddicts
Presentación: https://docs.google.com/presentation/d/1emOBagcUpeerF5vab_wkXNSBX1lyfRmt5UbGw5DtsOs/edit?usp=sharing
Colección postman: https://www.getpostman.com/collections/076584fbb821cd6d6155
Email:
[email protected]
Web:
www.apiaddicts.org
http://Apiaddicts.leadgods.com
Follow us:
Linkedin:
https://www.linkedin.com/company/apiaddicts
Twitter: @apiaddicts
Facebook:
https://www.facebook.com/pages/APIAddicts
Meetup:
http://www.meetup.com/es-ES/ApiAddicts
Contact