Slide 1

Slide 1 text

API bootcamp Boost Academy benjagm Benjamín Granados Developer Evangelist Noviembre 2022

Slide 2

Slide 2 text

Benjamín Granados Developer Evangelist at I APIs https://www.linkedin.com/in/benjagranados benjagm

Slide 3

Slide 3 text

benjagm You know Twilio, disruptors use Twilio

Slide 4

Slide 4 text

01 Introducción 03 EXPLORAR APIs 02 Api basics 04 usar apis benjagm 05 Diseñar apis 06 Implementar apis 07 Ejercicio final

Slide 5

Slide 5 text

01. Presentación benjagm

Slide 6

Slide 6 text

presentación Bienvenid@ al API Bootcamp: ● El propósito de este curso es comprender qué son las APIs, porque son tan importantes, aprender cómo explorar APIs y cómo usarlas para construir aplicaciones increíbles. Además aprenderemos a crear APIs y los aspectos principales de su ciclo de vida. ● ¿Por qué este curso? Las APIs están por todas partes y son un elemento fundamental de la mayoría de apps y plataformas que nos rodean. Como futuros desarrolladores espero que este curso os permita entender el concepto e incorporar las APIs como herramientas accesibles para vuestros futuros desarrollos. ● El Bootcamp está inspirado en el curso APIs for Beginners creado por Craig Dennis en la plataforma freecodecamp.org. benjagm

Slide 7

Slide 7 text

Antes de empezar Todo el contenido y los ejemplos empleados en este Workshop están disponibles en este repo: https://github.com/benjagm/api-bootcamp-boost-academy benjagm

Slide 8

Slide 8 text

02. API BASICS benjagm

Slide 9

Slide 9 text

¿qué es una api? En esta sección cubriremos estos bloques: ● Definición de Interface. ● Definición de API. ● ¿Por qué son tan importantes? ● API Styles. ● APIs REST. benjagm Application Programming interface

Slide 10

Slide 10 text

Definición de interface benjagm

Slide 11

Slide 11 text

Definición de API benjagm https://www.w3schools.com/python/python_ref_string.asp

Slide 12

Slide 12 text

Definición de API benjagm Las APIs hacen la vida más fácil a los developers

Slide 13

Slide 13 text

Definición de API benjagm

Slide 14

Slide 14 text

Definición de API benjagm Apis expose something useful Developers write apps which consumes apis

Slide 15

Slide 15 text

Definición de API benjagm UNIVERSAL FÁCIL DE USAR Como LEGO, las APIs tienen sus instrucciones y documentación para que sean fáciles de usar. Como LEGO, las APIs son bloques de construcción universales. En este caso para la creación de Apps. CONFIGURABLE INNOVACIÓN Como LEGO, las APIs permiten crear soluciones de altísimo valor ahorrando mucho tiempo. Como LEGO, las APIs dan la opción al usarlas de combinarlas para distintos casos de uso.

Slide 16

Slide 16 text

Definición de API benjagm

Slide 17

Slide 17 text

APIs están en todas partes benjagm

Slide 18

Slide 18 text

Cómo funcionan las APIS benjagm Servidor APIs UI

Slide 19

Slide 19 text

Cómo funcionan las APIS benjagm Quiero crear una app que me muestre en el mapa los mejores restaurantes para celíacos y me permita: hacer un reserva, ver reviews de otros clientes y votar para crear un ranking.

Slide 20

Slide 20 text

Cómo funcionan las APIS benjagm Google Maps API Calendly API Trip Advisor API Google Identity API Mi API de Voto / Ranking

Slide 21

Slide 21 text

Cómo funcionan las APIS benjagm Servidor APIs UI

Slide 22

Slide 22 text

API STYLES benjagm REST AsyncAPI GraphQL gRPC Webhooks SOAP Web Services

Slide 23

Slide 23 text

API REST benjagm cliente servidor request response recursos

Slide 24

Slide 24 text

API REST benjagm

Slide 25

Slide 25 text

API REST benjagm Colección de recursos libros

Slide 26

Slide 26 text

API REST benjagm /book-2625 Recurso Libro

Slide 27

Slide 27 text

API REST benjagm Recurso Autor Coleccion libros https://www.todostuslibros.com/

Slide 28

Slide 28 text

Api rest benjagm

Slide 29

Slide 29 text

Api rest benjagm

Slide 30

Slide 30 text

API REST benjagm

Slide 31

Slide 31 text

API REST benjagm

Slide 32

Slide 32 text

Api rest benjagm

Slide 33

Slide 33 text

API REST benjagm ● GET /books: get all the available books ● POST /books: create a new book ● GET /books/{id}: get the details of a book with a specific ID ● PUT /books/{id}: update the details of a book with a specific ID ● DELETE /books/{id}: delete a book with a specific ID ● GET /authors/{id}: get the details of an author with a specific ID

Slide 34

Slide 34 text

API REST benjagm API methods https://developer.twitter.com/en/docs/twitter-api/v1 Carta https://restaurantecasares.com/

Slide 35

Slide 35 text

03. Explorando apis benjagm

Slide 36

Slide 36 text

Explorando apis En esta sección cubriremos estos bloques: ● Explorando APIs Online. ● Spotify for Developers ● Spotify - Search API {BETA} ● Explorando APIs desde la línea de comandos con CURL. ● Twilio ● Twilio Console ● Explorando APIs con Postman. https://jsonplaceholder.typicode.com/ benjagm

Slide 37

Slide 37 text

04. Usando apis benjagm

Slide 38

Slide 38 text

UsanDO APIS En esta sección cubriremos estos bloques: ● Que es un SDK ● Introducción al SDK de Twilio Messaging para Python. ● Aplicación de ejemplo en la que implementar un envío de SMS usando la API y el SDK de Twilio. https://www.twilio.com/docs/sms/quickstart/python benjagm

Slide 39

Slide 39 text

Que es un sdk benjagm Declarar un cliente http para cada llamada con todo lo que acarrea es cansino

Slide 40

Slide 40 text

Que es un sdk benjagm

Slide 41

Slide 41 text

Usando un sdk benjagm Aplicación de ejemplo en la que implementar un envío de SMS usando la API y el SDK de Twilio.

Slide 42

Slide 42 text

05. DISEÑAR apis benjagm

Slide 43

Slide 43 text

Producers vs consumers benjagm

Slide 44

Slide 44 text

Api-first vs code-first benjagm

Slide 45

Slide 45 text

CREANDO APIS benjagm API first 👍 Code first 🤞

Slide 46

Slide 46 text

https://leanpub.com/restful-api-design API MODELING PROCESS benjagm Identify participants Identify activities Break activities into steps Create and group API Methods From Modeling to RESTful Design https://leanpub.com/restful-api-desi gn

Slide 47

Slide 47 text

Identify participants benjagm

Slide 48

Slide 48 text

Identify activities benjagm

Slide 49

Slide 49 text

Break activities into steps benjagm

Slide 50

Slide 50 text

Create and group api methods benjagm

Slide 51

Slide 51 text

From modeling to restful design API DESIGN principles benjagm ● ARQUETIPOS DE RECURSOS ● HEADERS Y PAYLOADS ● URIS ● PARAMETROS ● MÉTODOS HTTP ● CÓDIGOS DE RESPUESTA

Slide 52

Slide 52 text

ARQUETIPOS RECURSOS benjagm RECURSO COLLECTION *STORE RECURSO DOCUMENT CONTROLLER RECURSO http://myapi.com/books http://myapi.com/books/1 http://myapi.com/me/unlock http://uniknow.github.io/AgileDev/site/0.1.9-SNAPSHOT/parent/rest/resource-archetypes.html

Slide 53

Slide 53 text

HEADERS Y PAYLOADS benjagm

Slide 54

Slide 54 text

URIs benjagm RFC 3986

Slide 55

Slide 55 text

Path parameters vs query parameters benjagm http://localhost:1234/hrservices/v1/users/245/orders?month=april&status=pending sub-Recurso de tipo Colección Query param Query param PATH param Los parámetros PATH se usan para identificar recursos o sub-recursos. Los parámetros de QUERY son parámetros de entrada que se pasan a las operaciones para filtrar, ordenar o informar otras opciones.

Slide 56

Slide 56 text

Metodos http benjagm * POST también se usa para los endpoints de tipo controller: POST http://api.example.com/song-management/users/{id}/playlist/play *

Slide 57

Slide 57 text

Códigos de respuesta benjagm Success Client error Server error

Slide 58

Slide 58 text

FROM MODELING TO RESTful design benjagm Resources Taxonomy Resources Lifecycle Mapping Response Codes Documenting https://leanpub.com/restful-api-design

Slide 59

Slide 59 text

Resources taxonomy benjagm

Slide 60

Slide 60 text

Resources lifecycle benjagm

Slide 61

Slide 61 text

Response codes benjagm

Slide 62

Slide 62 text

Response codes benjagm or 204 No Content

Slide 63

Slide 63 text

Response codes benjagm

Slide 64

Slide 64 text

ejemplos benjagm CREAR RECURSOS RECUPERAR RECURSOS

Slide 65

Slide 65 text

ejemplos benjagm MODIFICAR RECURSOS BORRAR RECURSOS

Slide 66

Slide 66 text

Api contract / specification benjagm

Slide 67

Slide 67 text

Openapi specification benjagm OpenAPI es un formato para describir web APIs, por lo tanto está totalmente ligado al protocolo HTTP. ● Permite definir un contrato común y público entre servicios : proveedor - consumidor. ● ES Human and machine readable. ● Independiente del lenguaje/framework/tecnología. ● Permite usar los formatos YAML o JSON.

Slide 68

Slide 68 text

Openapi specification benjagm servers security info paths tags externalDocs components OpenAPI v3.0 ● La sección info contiene información de alto nivel de la API como: Titulo descripción y versión. ● El objeto servers proporciona información de conectividad. ● El objeto security declara qué mecanismos de seguridad se pueden utilizar. ● El objeto paths describe los métodos a los que se puede acceder ● El objeto components, que contiene un conjunto de objetos/estructuras de datos reutilizables. ● externalDocs: Documentación externa adicional.

Slide 69

Slide 69 text

components benjagm servers security info paths tags externalDocs components OpenAPI v3.0

Slide 70

Slide 70 text

info https://www.digitalocean.com/community/tutorials/how-to-create-documentation-for-your-rest-api-with-insomnia

Slide 71

Slide 71 text

Externaldocs and server https://www.digitalocean.com/community/tutorials/how-to-create-documentation-for-your-rest-api-with-insomnia

Slide 72

Slide 72 text

path https://www.digitalocean.com/community/tutorials/how-to-create-documentation-for-your-rest-api-with-insomnia

Slide 73

Slide 73 text

operation https://www.digitalocean.com/community/tutorials/how-to-create-documentation-for-your-rest-api-with-insomnia

Slide 74

Slide 74 text

schema https://www.digitalocean.com/community/tutorials/how-to-create-documentation-for-your-rest-api-with-insomnia

Slide 75

Slide 75 text

SPEC in multiple files https://redocly.com/docs/resources/multi-file-definitions/

Slide 76

Slide 76 text

Ejemplo openapi Ahora revisemos un par de ejemplos usando Swagger editor, Mermade Openapi-gui, Insomnia y Postman como editores. benjagm

Slide 77

Slide 77 text

API DESIGN best practices benjagm ● NOMENCLATURA DE RECURSOS ● FORMATOS DE MENSAJE ● CABECERAS ● VERSIONADO ● EJEMPLOS https://books.google.es/books?id=eABpzyTcJNIC&dq=REST+API+Design+Rulebook&hl=es

Slide 78

Slide 78 text

RESOURCES NAMING benjagm https://restfulapi.net/resource-naming/

Slide 79

Slide 79 text

RESOURCES NAMING benjagm https://restfulapi.net/resource-naming/

Slide 80

Slide 80 text

RESOURCES NAMING benjagm https://restfulapi.net/resource-naming/

Slide 81

Slide 81 text

RESOURCES NAMING benjagm https://restfulapi.net/resource-naming/

Slide 82

Slide 82 text

RESOURCES NAMING benjagm https://restfulapi.net/resource-naming/

Slide 83

Slide 83 text

RESOURCES NAMING benjagm https://restfulapi.net/resource-naming/

Slide 84

Slide 84 text

RESOURCES NAMING benjagm https://restfulapi.net/resource-naming/

Slide 85

Slide 85 text

RESOURCES NAMING benjagm https://restfulapi.net/resource-naming/

Slide 86

Slide 86 text

RESOURCES NAMING benjagm https://restfulapi.net/resource-naming/

Slide 87

Slide 87 text

RESOURCES NAMING benjagm https://restfulapi.net/resource-naming/

Slide 88

Slide 88 text

RESOURCES NAMING benjagm https://restfulapi.net/resource-naming/

Slide 89

Slide 89 text

RESOURCES NAMING benjagm

Slide 90

Slide 90 text

Formatos de mensaje de llamada y respuesta benjagm Los formatos más habituales de mensaje son: ● Plain: application/json, application/json ● Vendor specific: e.g. application/vnd.github.v3+json ● Standard/Hipermedia: e.g. HAL, Collection+JSON or JSON-API, Siren, etc. Nomenclatura de atributos en mensajes de tipo JSON: Es clave la consistencia. Para toda la API debe usarse el mismo formato: ● myIdentifier : Camel case (e.g. in java variable names) ● MyIdentifier : Capital camel case (e.g. in java class names) ● my_identifier : Snake case (e.g. in python variable names) ● my-identifier : Kebab case (e.g. in racket names) ● myidentifier : Flat case (e.g. in java package names) Mi recomendación es usar Camel case. PLAIN MEDIA TYPES Type application: application/json application/xml application/zip Type audio: audio/mpeg Type image: image/gif image/jpeg image/png Type multipart: multipart/mixed multipart/form-data Type text: text/csv text/xml Type video: video/mpeg video/mp4

Slide 91

Slide 91 text

Formatos de mensaje de llamada y respuesta benjagm

Slide 92

Slide 92 text

versionado benjagm BEST PRACTICES Backward Compatibility It is an excellent practice to have your API backward compatible if possible. URI Versioning While creating new versions of your API, you should add the version number in your API URI. Use Semantic Versioning You use semantic versioning to version your API, i.e., major.minor.patch. If you have introduced some major changes that would break the previous version, you should update the major version like 2.0.0. You update the minor one when you make some new changes, but they are not breaking the previous release. And lastly, if you are patching some bug, update the patch number.

Slide 93

Slide 93 text

cabeceras benjagm

Slide 94

Slide 94 text

06. CICLO DE VIDA benjagm

Slide 95

Slide 95 text

Api lifecycle benjagm DESIGN DOCUMENT MOCK IMPLEMENT TEST DEPLOY

Slide 96

Slide 96 text

Api lifecycle benjagm Validate Format Validate Examples OpenAPI Spec Design OpenAPI Spec generated Document Mocking Implement Testing Monitoring + Security Client + SDK Prism Redocly Dredd

Slide 97

Slide 97 text

OPEN API Tools https://openapi.tools/ Tool Types ● Auto Generators: Tools that will take your code and turn it into an OpenAPI Specification document. ● Converters: Various tools to convert to and from OpenAPI and other API description formats. ● Data Validators: Check to see if API requests and responses are lining up with the API description. ● Description Validators: Check your API description to see if it is valid OpenAPI. ● Documentation: Render API Description as HTML (or maybe a PDF) so slightly less technical people can figure out how to work with the API. ● DSL: Domain Specific Language to write OpenAPI in your language of choice. ● GUI Editors: Visual editors help you design APIs without needing to memorize the entire OpenAPI specification. ● Miscellaneous: Anything else that does stuff with OpenAPI but hasn't quite got enough to warrant its own category. ● Mock Servers: Fake servers that take description document as input, then route incoming HTTP requests to example responses. ● Parsers: Loads and read OpenAPI descriptions, so you can work with them programmatically. ● SDK Generators: Generate code to give to consumers, to help them avoid interacting at a HTTP level. ● Security: By poking around your OpenAPI description, some tools can look out for attack vectors you might not have noticed. ● Server Implementations: Easily create and implement resources and routes for your APIs. ● Testing: Quickly execute API requests and validate responses on the fly through command line or GUI interfaces. ● Text Editors: Text editors give you visual feedback whilst you write OpenAPI, so you can see what docs might look like. ● Learning: Whether you're trying to get documentation for a third party API based on traffic, or are trying to switch to design-first at an organization with no OpenAPI at all, learning can help you move your API spec forward and keep it up to date

Slide 98

Slide 98 text

Api lifecycle commands benjagm Validar especificación: $ spectral lint openapi.yaml Generar Documentación: $ redocly preview-docs openapi.yaml Generar Mocks: $ prism mock -d openapi.yaml # Dynamic examples $ prism mock openapi.yaml # Static examples Generar código: $ openapi-generator-cli generate -g nodejs-express-server -i openapi.yaml -o api_server $ openapi-generator-cli generate -g javascript -i openapi.yaml -o api_client Pruebas: $ st run openapi.yaml

Slide 99

Slide 99 text

Recursos. benjagm

Slide 100

Slide 100 text

Recursos ● Curso APIs for Beginners en freecodecamp.org por Craig Dennis. ● https://www.freecodecamp.org/news/apis-for-beginners-full-course/ ● Github del Curso. ● Presentación del curso. ● Recursos Twilio ● Docs Twilio ● https://www.twilio.com/docs/sms/quickstart/python ● Postman: https://www.postman.com/ ● Insomnia: https://insomnia.rest/ ● Mermade Openapi-gui Openapi-ui: https://github.com/Mermade/openapi-gui ● CURL: https://curl.se/ ● Ejemplo de crear una api con Insomnia: https://www.digitalocean.com/community/tutorials/how-to-create-documentation-for-your-rest-api-with-insomnia ● OpenAPI Specification: https://spec.openapis.org/oas/latest.html ● Rest API Design: https://www.mscharhag.com/p/rest-api-design ● Open API Tools: https://openapi.tools/ ● A Practical Approach to API Design: https://leanpub.com/restful-api-design ● Repo con la presentación: https://github.com/benjagm/api-bootcamp-boost-academy benjagm

Slide 101

Slide 101 text

CREDITS: This presentation template was created by Slidesgo, including icons by Flaticon, and infographics & images by Freepik and illustrations by Storyset THANKS Does anyone have any questions? [email protected] +34 661 709 879 twilio.com Please keep this slide for attribution. benjagm