View
401
Download
2
Category
Preview:
Citation preview
APIs: o que são, onde vivem, do que se
alimentam?Filipe Ximenes
APIs: O que são?
Onde vivem? Do que se alimentam?
No programa de hoje
Sobre
● Filipe Ximenes (Xima)○ Recife○ Vinta○ 4 anos na comunidade Python○ Django○ Javascript○ APIs
Open source
Django Role Permissionshttps://github.com/vintasoftware/django-role-permissions
Tapiocahttps://github.com/vintasoftware/tapioca-wrapper
● 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
● 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?
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))
APIs web
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)
https://www.instagram.com/developer/endpoints/users/
Ultimas coisas postadas pelo usuário
Ultimas coisas postadas pelo usuário
Como funciona a internet
Client - Servidor
● Aplicação (HTTP)● Transporte (TCP, UDP)● Internet (IP) ● Interfaces físicas (Ethernet, ATM, Wi-fi)
Camadas da internet
HTTP
GET /index.html HTTP/1.1Host: www.example.com
A requisição HTTP
GET /index.html HTTP/1.1Host: www.example.com
A requisição HTTP
método caminho
endereço
Métodos HTTP
● GET● POST● PUT● PATCH● DELETE
Caminho & Endereço
URL = Endereço + Caminho
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
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
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
Body & Media types
● Conteúdo da mensagem● Pode ser qualquer tipo de texto capaz de
trafegar pelo protocolo HTTP
HTML
<html> <head> </head> <body> <h1>PyNE</h1> <p>\o/\o/\o/</p> </body></html>
HTTP & HTML
Hyper Text Transfer Protocol (HTTP)
Hyper Text Markup Language (HTML)
XML
<?xml version="1.0" encoding="UTF-8"?>
<conferencia>
<nome>PyNE</nome>
<mensagem>\o/\o/\o/</mensagem>
</conferencia>
JSON
{ "conferencia": "PyNE", "mensagem": "\o/\o/\o/"}
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/"}
Padrões* de API webRPC vs. REST
RPC
● Remote Procedure Call● Protocolos:
○ RMI - Remote Method Invocation○ CORBA - Common Object Request Broker
Architecture○ SOAP - Simple Object Access Protocol
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>
REST
● REpresentational State Transfer● Roy Fielding
○ Protocolo HTTP (1997)○ REST (2000)
● Estilo arquitetural● O protocolo HTTP é RESTful*● Muito popular para se construir APIs
REST
● Tangíves ou intangíveis● Recurso != Tabela do banco de dados
○ 1 ou + tabelas○ Processamento
● Substantivos
Recursos (resources)
Recursos (resources)
● Peças de uma bicicleta● Bicicleta montada● Trajeto percorrido● Registro da manutenção da bicicleta● Acessórios
● Completa ou parcial● Quantidade por recurso: [0, +infinito)● Segurança
Representações
Representações
● Rodas● Quadro● Pedal● Guidão● Freios● Tamanho
● Marca● Ano● Modelo
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}
}
URLs
http://www.example.org/api/bicicletas
● Uniform Resource Locator● Localizar recursos
Endpoint = URL + Recurso
Ações (métodos HTTP)
● Verbos
GET Recuperar
POST Criar
PUT Editar
DELETE Deletar
Vamos construir uma API!
Sistema para montar bicicletas customizadas
● Criar/Recuperar/Editar uma bicicleta com um nome.
● Listar peças disponíveis.● Adicionar peças na bicicleta.
Nossos recursos
● Peças○ Código identificador○ Tipo (quadro, guidão, banco, …)○ Cor
● Bicicleta○ Código identificador○ Nome○ Lista de peças
Criando a bicicleta
POST /api/bicicletas HTTP/1.1Host: www.example.comContent-Type: application/json
{ "nome": "Bicipy"}
Criando a bicicleta (resposta)
HTTP/1.1 201 CREATEDLocation: /api/bicicletas/1
Editando a bicicleta
PUT /api/bicicletas/1 HTTP/1.1Host: www.example.comContent-Type: application/json
{ "nome": "Bicipy PyNE"}
Editando a bicicleta (resposta)
HTTP/1.1 200 OKContent-Type: application/json
{ "nome": "Bicipy PyNE"}
Listando as peças
GET /api/pecas HTTP/1.1Host: www.example.com
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"}
]
Adicionando peças na bicicleta
POST /api/bicicletas/1/pecas HTTP/1.1Host: www.example.comContent-Type: application/json
[1, 3]
Adicionando peças na bicicleta (resposta)
HTTP/1.1 201 CREATEDLocation: /api/bicicletas/1/pecas
Recuperando a bicicleta
GET /api/bicicletas/1 HTTP/1.1Host: www.example.com
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"}]
}
Cabô?
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
Outros termos importantes
● Authenticação:○ Basic Authentication○ Token○ OAuth 1○ OAuth 2
● Versionamento● Permissões● Paginação● Throttling● HATEOAS
Link da palestra: bit.ly/apis-o-que-sao
Twitter: @ximaGithub: filipeximenesEmail: ximenes@vinta.com.br
Perguntas?
Recommended