APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]

Information about APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]

Published on June 10, 2016

Author: filipeximenes

Source: slideshare.net

Content

1. APIs: o que são, onde vivem, do que se alimentam? Filipe Ximenes

2. APIs: O que são? Onde vivem? Do que se alimentam? No programa de hoje

3. Sobre ● Filipe Ximenes (Xima) ○ Recife ○ Vinta ○ 4 anos na comunidade Python ○ Django ○ Javascript ○ APIs

4. Open source Django Role Permissions https://github.com/vintasoftware/django-role-permissions Tapioca https://github.com/vintasoftware/tapioca-wrapper

5. ● Entender o que é uma API. ● Entender quando e por que temos que desenvolver APIs ● Explorar os principais conceitos relacionados ao desenvolvimento delas. ● Desmistificar termos e expressões. Objetivos da palestra

6. ● APIs definem a interface de interação de um software ● Software ○ Uma classe Python ○ Um banco de dados ○ Um hardware ○ Um plugin ○ Uma biblioteca ○ Um serviço web O que é uma API?

7. Ex.: uma classe de Python class User(object): name = '' email = '' def update_data(self, name, email): self.name = name self.email = email def talk(self, message): print('{} says: {}'.format(self.name, message))

8. APIs web

9. Para que serve uma API? ● Pequenas interações numa página ○ Autocomplete ○ Busca sem reload ● Aplicativo de celular ● Aplicações de uma página (Single Page Applications - SPA) ○ React ○ Angular ● Disponibilização de serviços para terceiros (APIs públicas)

10. Instagram https://www.instagram.com/developer/endpoints/users/

11. Ultimas coisas postadas pelo usuário

12. Ultimas coisas postadas pelo usuário

13. Como funciona a internet

14. Client - Servidor

15. ● Aplicação (HTTP) ● Transporte (TCP, UDP) ● Internet (IP) ● Interfaces físicas (Ethernet, ATM, Wi-fi) Camadas da internet

16. HTTP

17. GET /index.html HTTP/1.1 Host: www.example.com A requisição HTTP

18. GET /index.html HTTP/1.1 Host: www.example.com A requisição HTTP método caminho endereço

19. Métodos HTTP ● GET ● POST ● PUT ● PATCH ● DELETE

20. Caminho & Endereço URL = Endereço + Caminho

21. HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache/2.2.14 (Win32) Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT Content-Type: text/html Connection: Closed <h1>Hello World</h1> A resposta HTTP

22. A resposta HTTP HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache/2.2.14 (Win32) Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT Content-Type: text/html Connection: Closed <h1>Hello World</h1> Body Status Media type

23. Status ● 200 OK ● 201 CREATED ● 301 MOVED PERMANENTLY ● 302 FOUND ● 400 BAD REQUEST ● 401 UNAUTHORIZED ● 404 NOT FOUND ● 500 INTERNAL SERVER ERROR https://httpstatusdogs.com

24. Body & Media types ● Conteúdo da mensagem ● Pode ser qualquer tipo de texto capaz de trafegar pelo protocolo HTTP

25. HTML <html> <head> </head> <body> <h1>PyNE</h1> <p>o/o/o/</p> </body> </html>

26. HTTP & HTML Hyper Text Transfer Protocol (HTTP) Hyper Text Markup Language (HTML)

27. XML <?xml version="1.0" encoding="UTF-8"?> <conferencia> <nome>PyNE</nome> <mensagem>o/o/o/</mensagem> </conferencia>

28. JSON { "conferencia": "PyNE", "mensagem": "o/o/o/" }

29. Aplicação web HTML vs. API <html> <head> </head> <body> <h1>PyNE</h1> <p>o/o/o/</p> </body> </html> { "conferencia": "PyNE", "mensagem": "o/o/o/" }

30. Padrões* de API web RPC vs. REST

31. RPC ● Remote Procedure Call ● Protocolos: ○ RMI - Remote Method Invocation ○ CORBA - Common Object Request Broker Architecture ○ SOAP - Simple Object Access Protocol

32. SOAP GET /api HTTP/1.1 Host: www.example.com <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3. org/2003/05/soap-envelope"> <soap:Header> </soap:Header> <soap:Body> <m:GetStockPrice xmlns:m="http://www.example.org/stock/Surya"> <m:StockName>IBM</m:StockName> </m:GetStockPrice> </soap:Body> ... </soap:Envelope>

33. REST ● REpresentational State Transfer ● Roy Fielding ○ Protocolo HTTP (1997) ○ REST (2000) ● Estilo arquitetural ● O protocolo HTTP é RESTful* ● Muito popular para se construir APIs

34. REST

35. ● Tangíves ou intangíveis ● Recurso != Tabela do banco de dados ○ 1 ou + tabelas ○ Processamento ● Substantivos Recursos (resources)

36. Recursos (resources) ● Peças de uma bicicleta ● Bicicleta montada ● Trajeto percorrido ● Registro da manutenção da bicicleta ● Acessórios

37. ● Completa ou parcial ● Quantidade por recurso: [0, +infinito) ● Segurança Representações

38. Representações ● Rodas ● Quadro ● Pedal ● Guidão ● Freios ● Tamanho ● Marca ● Ano ● Modelo

39. Representações <bicicleta> <quadro> <tamanho>52</tamanho> <cor>preto</cor> </quadro> <guidao> <tamanho>60</tamanho> </guidao> </bicicleta> { "quadro": { "tamanho": 52, "cor": "preto" } "guidao": { "tamanho": 60 } }

40. URLs http://www.example.org/api/bicicletas ● Uniform Resource Locator ● Localizar recursos

41. Endpoint = URL + Recurso

42. Ações (métodos HTTP) ● Verbos GET Recuperar POST Criar PUT Editar DELETE Deletar

43. Vamos construir uma API!

44. Sistema para montar bicicletas customizadas ● Criar/Recuperar/Editar uma bicicleta com um nome. ● Listar peças disponíveis. ● Adicionar peças na bicicleta.

45. Nossos recursos ● Peças ○ Código identificador ○ Tipo (quadro, guidão, banco, …) ○ Cor ● Bicicleta ○ Código identificador ○ Nome ○ Lista de peças

46. Criando a bicicleta POST /api/bicicletas HTTP/1.1 Host: www.example.com Content-Type: application/json { "nome": "Bicipy" }

47. Criando a bicicleta (resposta) HTTP/1.1 201 CREATED Location: /api/bicicletas/1

48. Editando a bicicleta PUT /api/bicicletas/1 HTTP/1.1 Host: www.example.com Content-Type: application/json { "nome": "Bicipy PyNE" }

49. Editando a bicicleta (resposta) HTTP/1.1 200 OK Content-Type: application/json { "nome": "Bicipy PyNE" }

50. Listando as peças GET /api/pecas HTTP/1.1 Host: www.example.com

51. Listando as peças (resposta) HTTP/1.1 200 OK Content-Type: application/json [ {"id": 1, "tipo": "Roda", "cor": "Azul"}, {"id": 2, "tipo": "Quadro", "cor": "Vermelho"}, {"id": 3, "tipo": "Guidão", "cor": "Preto"} ]

52. Adicionando peças na bicicleta POST /api/bicicletas/1/pecas HTTP/1.1 Host: www.example.com Content-Type: application/json [1, 3]

53. Adicionando peças na bicicleta (resposta) HTTP/1.1 201 CREATED Location: /api/bicicletas/1/pecas

54. Recuperando a bicicleta GET /api/bicicletas/1 HTTP/1.1 Host: www.example.com

55. Recuperando a bicicleta (resposta) HTTP/1.1 200 OK Content-Type: application/json { "nome": "Bicipy PyNE", "pecas": [ {"id": 1, "tipo": "Roda", "cor": "Azul"}, {"id": 3, "tipo": "Guidão", "cor": "Preto"}] }

56. Cabô?

57. Clientes de API ou Wrappers ● Implementam as chamadas a uma API usando a sua linguagem de programação ○ Autenticação ○ Composição das URLs ○ Processamento de requisições e respostas https://github.com/vintasoftware/tapioca-wrapper

58. Outros termos importantes ● Authenticação: ○ Basic Authentication ○ Token ○ OAuth 1 ○ OAuth 2 ● Versionamento ● Permissões ● Paginação ● Throttling ● HATEOAS

59. Link da palestra: bit.ly/apis-o-que-sao Twitter: @xima Github: filipeximenes Email: [email protected] Perguntas?

Related presentations


Other presentations created by filipeximenes

Embrulhando APIs com Tapioca
19. 05. 2015
0 views

Embrulhando APIs com Tapioca