ASP.NET Web API Appidcts2

Canal público / desarrollo

La charla tendrá los siguientes puntos:

- Introducción a REST

- Restricciones de la arquitectura

- ASP.NET Web API

- Implementando requerimientos básicos (demo)

- > Recursos / HTTP status code / GET / POST / PUT / PATCH / DELETE

- Relacionando recursos

- Ordenando resultados (demo)

- Filtro de resultados (demo)

- Paginando resultados (demo)

- Implementando requerimientos avanzados (y más demo)

-> Field-level selection / Cache / Versiones / Seguridad (implementando basic auth)

Compartir en redes sociales

Compartir enlace

Usar vinculo permanente para compartir en redes sociales

Compartir con un amigo

Por favor iniciar sesión para enviar esto presentation por correo!

Publicar comentario con dirección de correo electrónico (se requiere confirmación de correo electrónico para publicar comentarios en el sitio web) o por favor iniciar sesión publicar comentario

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

Vistas

  • 4415 Vistas totales
  • 3721 Vistas del sitio web

Acciones

  • 0 Acciones Sociales
  • 0 Me gusta
  • 0 No me gusta
  • 0 Comentarios

Veces compartido

  • 0 Facebook
  • 0 Twitter
  • 0 LinkedIn
  • 0 Google+