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

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

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

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

APIs: o que são, onde vivem, do que se

alimentam?Filipe Ximenes

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

APIs: O que são?

Onde vivem? Do que se alimentam?

No programa de hoje

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

Sobre

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

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

Open source

Django Role Permissionshttps://github.com/vintasoftware/django-role-permissions

Tapiocahttps://github.com/vintasoftware/tapioca-wrapper

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

● 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

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

● 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?

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

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))

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

APIs web

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

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)

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

Instagram

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

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

Ultimas coisas postadas pelo usuário

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

Ultimas coisas postadas pelo usuário

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

Como funciona a internet

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

Client - Servidor

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

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

Camadas da internet

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

HTTP

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

GET /index.html HTTP/1.1Host: www.example.com

A requisição HTTP

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

GET /index.html HTTP/1.1Host: www.example.com

A requisição HTTP

método caminho

endereço

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

Métodos HTTP

● GET● POST● PUT● PATCH● DELETE

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

Caminho & Endereço

URL = Endereço + Caminho

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

HTTP/1.1 200 OKDate: Mon, 27 Jul 2009 12:28:53 GMTServer: Apache/2.2.14 (Win32)Last-Modified: Wed, 22 Jul 2009 19:15:56 GMTContent-Type: text/htmlConnection: Closed

<h1>Hello World</h1>

A resposta HTTP

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

A resposta HTTP

HTTP/1.1 200 OKDate: Mon, 27 Jul 2009 12:28:53 GMTServer: Apache/2.2.14 (Win32)Last-Modified: Wed, 22 Jul 2009 19:15:56 GMTContent-Type: text/htmlConnection: Closed

<h1>Hello World</h1> Body

Status

Media type

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

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

Page 25: APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
Page 26: APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
Page 27: APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
Page 28: APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]

Body & Media types

● Conteúdo da mensagem● Pode ser qualquer tipo de texto capaz de

trafegar pelo protocolo HTTP

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

HTML

<html> <head> </head> <body> <h1>PyNE</h1> <p>\o/\o/\o/</p> </body></html>

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

HTTP & HTML

Hyper Text Transfer Protocol (HTTP)

Hyper Text Markup Language (HTML)

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

XML

<?xml version="1.0" encoding="UTF-8"?>

<conferencia>

<nome>PyNE</nome>

<mensagem>\o/\o/\o/</mensagem>

</conferencia>

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

JSON

{ "conferencia": "PyNE", "mensagem": "\o/\o/\o/"}

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

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/"}

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

Padrões* de API webRPC vs. REST

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

RPC

● Remote Procedure Call● Protocolos:

○ RMI - Remote Method Invocation○ CORBA - Common Object Request Broker

Architecture○ SOAP - Simple Object Access Protocol

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

SOAPGET /api HTTP/1.1Host: 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>

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

REST

● REpresentational State Transfer● Roy Fielding

○ Protocolo HTTP (1997)○ REST (2000)

● Estilo arquitetural● O protocolo HTTP é RESTful*● Muito popular para se construir APIs

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

REST

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

● Tangíves ou intangíveis● Recurso != Tabela do banco de dados

○ 1 ou + tabelas○ Processamento

● Substantivos

Recursos (resources)

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

Recursos (resources)

● Peças de uma bicicleta● Bicicleta montada● Trajeto percorrido● Registro da manutenção da bicicleta● Acessórios

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

● Completa ou parcial● Quantidade por recurso: [0, +infinito)● Segurança

Representações

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

Representações

● Rodas● Quadro● Pedal● Guidão● Freios● Tamanho

● Marca● Ano● Modelo

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

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}

}

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

URLs

http://www.example.org/api/bicicletas

● Uniform Resource Locator● Localizar recursos

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

Endpoint = URL + Recurso

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

Ações (métodos HTTP)

● Verbos

GET Recuperar

POST Criar

PUT Editar

DELETE Deletar

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

Vamos construir uma API!

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

Sistema para montar bicicletas customizadas

● Criar/Recuperar/Editar uma bicicleta com um nome.

● Listar peças disponíveis.● Adicionar peças na bicicleta.

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

Nossos recursos

● Peças○ Código identificador○ Tipo (quadro, guidão, banco, …)○ Cor

● Bicicleta○ Código identificador○ Nome○ Lista de peças

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

Criando a bicicleta

POST /api/bicicletas HTTP/1.1Host: www.example.comContent-Type: application/json

{ "nome": "Bicipy"}

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

Criando a bicicleta (resposta)

HTTP/1.1 201 CREATEDLocation: /api/bicicletas/1

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

Editando a bicicleta

PUT /api/bicicletas/1 HTTP/1.1Host: www.example.comContent-Type: application/json

{ "nome": "Bicipy PyNE"}

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

Editando a bicicleta (resposta)

HTTP/1.1 200 OKContent-Type: application/json

{ "nome": "Bicipy PyNE"}

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

Listando as peças

GET /api/pecas HTTP/1.1Host: www.example.com

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

Listando as peças (resposta)

HTTP/1.1 200 OKContent-Type: application/json

[{"id": 1, "tipo": "Roda", "cor": "Azul"},{"id": 2, "tipo": "Quadro", "cor": "Vermelho"},

{"id": 3, "tipo": "Guidão", "cor": "Preto"}

]

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

Adicionando peças na bicicleta

POST /api/bicicletas/1/pecas HTTP/1.1Host: www.example.comContent-Type: application/json

[1, 3]

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

Adicionando peças na bicicleta (resposta)

HTTP/1.1 201 CREATEDLocation: /api/bicicletas/1/pecas

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

Recuperando a bicicleta

GET /api/bicicletas/1 HTTP/1.1Host: www.example.com

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

Recuperando a bicicleta (resposta)HTTP/1.1 200 OKContent-Type: application/json

{"nome": "Bicipy PyNE","pecas": [

{"id": 1, "tipo": "Roda", "cor": "Azul"}, {"id": 3, "tipo": "Guidão", "cor": "Preto"}]

}

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

Cabô?

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

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

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

Outros termos importantes

● Authenticação:○ Basic Authentication○ Token○ OAuth 1○ OAuth 2

● Versionamento● Permissões● Paginação● Throttling● HATEOAS

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

Link da palestra: bit.ly/apis-o-que-sao

Twitter: @ximaGithub: filipeximenesEmail: [email protected]

Perguntas?