SlideShare uma empresa Scribd logo
APIs Rest(Ful): como fazer, por Alex Piaz
API's ReST(Ful)
Dicas, truques e subversão :-)
Alex Piaz - Abril 2015
O Palestrante (oh)
18+ WWW
14+ PHP / 10+ Drupal
09+ ISA
https://about.me/alexpiaz
API
Application Programming Interface
Define como o Software Interage
web API
API com transporte baseado em HTTP
ReST Soap XML-RPC
HTTP
Leia a RFC2616 até enjoar!
Por que API?
Porque é legal:-)
Separação de interesses
Manutenção
Escalar o desenvolvimento
Estratégias
(ou como fazer a sua api sair do papel)
API-First
Uma app nova? Faça a API primeiro!
http://apievangelist.com/
API-Last
Converta seu legado em API!
API-Never
Se for só um website.
NUNCA É SÓ UM WEBSITE!
Uma API é
um PACTO
Cópia do “suposto” pacto assinado entre o pe. Urbain Grandier e vários capetas!
http://en.wikipedia.org/wiki/Urbain_Grandier
ReST
Representational State Transfer
Estilo arquitetural da web
ReST(Ful)
ReST Constraints
Client-Server
Stateless
Cache
Uniform Interface
Layered System
Code-On-Demand*
Uniform Interface
Identificação dos recursos
http://ufo-api.zaip.net/v1/casos/o-caso-varginha
+
VERBOS HTTP
Manipulação de recursos através de
suas representações
Mensagens auto descritivas
HTTP Status codes
Mime types/media types
Hypermedia
HATEOAS
Hypermedia as the engine of the application state
<recurso>
<id>1</id>
….
<links>
<link rel=”self” href=”/recursos/1” />
<link rel=”parent” href=”/recursos” />
<link rel=”next” href=”/recursos/2” />
</links>
</recurso>
JSON hypermedia?
NO. NÃO. IIE. NON. NICHT
E agora?
HAL - Hypertext Application Language
http://stateless.co/hal_specification.html
JSON-LD
http://www.w3.org/TR/json-ld/
Hypermedia
HAL
application/json ou application/json+hal
_links:
{
self:
{
href: "/recursos/1"
},
parent:
{
href: "/recursos"
}
}
Richardson Maturity Model
Projetando API's
Exemplo: UFO API
Objetivo
Disponibilizar
informações sobre casos
de ocorrências de
avistamento / contato
com ufos
UFO API :: Modelo
Caso
ID
Nome
Descrição
Ano
País
URL's
Identificação dos Recursos
Endpoint
https://ufo-api.dominio.com
https://dominio.com/ufo-api
https://api.ufo-api.com
Versionamento
3 jeitos de fazer
1. URL
2. QUERY STRING
3. HEADER [custom ou Accept]
Versionamento via URL
https://api.ufo-api.com/v1/casos
Versionamento via QUERY STRING
https://api.ufo-api.com/casos?v=1
Versionamento via HTTP HEADER
X-API-Version:1
Accept:application/vnd.ufoapi.v1+json
A parada é ter um contrato estável!
Recursos são coisas!
Substantivos em vez de verbos
/getCaso/1 /caso/ver/1
/casos/1
[ VERBOS HTTP ]
plural em vez de singular
s [ MEDIA TYPES ]
Resource Archetypes
Collection /v1/casos
Instance / Document /v1/casos/1
Store /v1/casos/favoritos/alex
Controller /autenticar
Alias /v1/casos/brasil ==
/v1/casos?pais=Brasil
2 tipos de recurso
Collection /casos [GET POST PUT]
Document /casos/{x} [GET PUT DELETE]
Complexidade vai para a query string!
Negociação de Conteúdo
“Quem pode, manda. Quem tem juízo, obedece.”
Cliente diz o que quer receber. Você se vira pra entregar!
Request
Accept: application/json;q=0.9,application/xml;q=0.8,*/*;q=0.4
Response
Content-type: application/json
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
E se eu não puder entregar?
Request
Accept: application/json;q=1,text/xml;q=0.8
++ EU SÓ TENHO text/csv ++
Response
HTTP/1.1 406 Not Acceptable
Obtendo um recurso
GET /casos
Accept: application/json
GET /casos
Accept: application/xml
GET /casos.json .xml .bla bla bla
#REQUEST
Obtendo um recurso
200 OK
Content-type: application/json
[{
"id": 1,
"nome": "O caso Varginha",
"descricao": "Incidente de Varginha...",
"_links": {
"self": {
"href": "/casos/1"
}
}
},
…
]
200 OK
Content-type: application/xml
<casos>
<caso>
<id>1</id>
<nome>O caso Varginha</nome>
<descricao>Incidente de Varginha…</descricao>
<link rel=”self” href=”/casos/1” />
<link rel=”parent” href=”/casos” />
<link rel=”next” href=”/casos/2” />
</caso>
…
</casos>
#RESPONSE
Se o recurso não existir...
GET /casos/um-caso-que-nao-existe
HTTP/1.1 404 Not Found
Criando um novo recurso
#REQUEST
POST /casos
Content-Type: application/json
{
"nome": "A noite oficial dos OVNIS no Brasil.",
"descricao": "Noite Oficial dos OVNIs é um termo adotado por ufólogos
brasileiros para descrever a aparição de vários Objetos Voadores Não-
Identificados (OVNI) sobre o Brasil de acordo com informações do Comando da
Aeronáutica do Brasil.",
“ano”: 1986,
“pais”: “Brasil”
}
Criando um novo recurso
#RESPONSE
201 Created
Location: /casos/3
Content-Type: application/json
{
"message”: “Caso criado com sucesso!”
}
Criando um novo recurso
#RESPONSE
201 Created
Location: /casos/3
Content-Type: application/json
{
"id": 3,
"nome": "A noite oficial dos OVNIS no Brasil.",
"descricao": "Noite Oficial dos OVNIs é um termo adotado por ufólogos
brasileiros para descrever a aparição de vários Objetos Voadores Não-
Identificados (OVNI) sobre o Brasil de acordo com informações do Comando da
Aeronáutica do Brasil.",
“ano”: 1986,
“pais”: “Brasil”
}
Atualizando um recurso
#REQUEST
PUT /casos/1
Content-Type: application/json
{......}
#RESPONSE
204 NO CONTENT
Content-Typo: application/json
Location: /casos/1
Para atualizaçoes parciais, use PATCH
Excluindo um recurso
DELETE /casos/2
200 OK
{
"mensagem": "Caso excluído”
}
Paginando resultados
Use o HTTP Header “Link”
http://tools.ietf.org/html/rfc5988#page-6
Link: <https://api.ufo-api.com/v1/casos?offset=15&limit=5>; rel="next",
<https://https://api.ufo-api.com/v1/casos?offset=50&limit=3>; rel="last",
<https://https://api.ufo-api.com/v1/casos?offset=0&limit=5>; rel="first",
<https://https://api.ufo-api.com/v1/casos?offset=5&limit=5>; rel="prev",
Total de resultados? Custom Header!
X-Total-Count: 120
Filtrando resultados
/casos?pais=brasil
Ordenando resultados
/casos?sort=-ano,+nome
- descending
+ ascending
Restringindo campos
/casos/3?fields=nome,ano
{
"id": 3,
"nome": "O caso
Varginha",
"ano": 1996,
...
}
Autenticação / Controle de Acesso
Basic Auth
Digest Auth
oAuth2
WWW-Authenticate
IP / Rede
Ferramentas úteis
Prototipagem
https://apiary.io/
Documentando sua API
Swagger
http://swagger.io/
Frameworks
FRAPI
http://getfrapi.com
APIGILITY
http://apigility.org
PhlyRestfully
https://phlyrestfully.
readthedocs.org/en/latest/
TONIC
http://www.peej.co.
uk/tonic/
Silex et al
Plataformas na nuvem (oh)
http://restlet.com/products/apispark/
http://apigee.com/about/
Perguntas, dúvidas, sugestões
? ? ? ? ?
Avalie esta palestra!
https://joind.in/14357
Obrigado!!!!

Mais conteúdo relacionado

ODP
Boas práticas no desenvolvimento de uma RESTful API
PPTX
REST: Padrões e Melhores Práticas
PDF
Boas práticas de API Design
PDF
Como um grande sistema REST funciona - arquitetura e desempenho
PDF
Web 2.0 e RIA com PHP
PDF
Panorama atual do PHP
ODP
Phpreact flisol-fb-2014
PDF
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
Boas práticas no desenvolvimento de uma RESTful API
REST: Padrões e Melhores Práticas
Boas práticas de API Design
Como um grande sistema REST funciona - arquitetura e desempenho
Web 2.0 e RIA com PHP
Panorama atual do PHP
Phpreact flisol-fb-2014
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...

Mais procurados (20)

PPTX
Workshop react + adonis.js
PDF
Ferramentas Livres Para Desenvolvimento com PHP
PDF
Webservices
PDF
Aula Introdução a VRaptor 4 - Pós Java UTFPR
PDF
Introdução APIs RESTful
PDF
REST - The right way
PDF
Zend Framework
PDF
.NET 6: O que há de novo e o que está por vir?
PPTX
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
PPTX
A Evolução do Front end
ODP
Zend Framework
PPTX
9 erros que desenvolvedores Node.js cometem
PDF
Usando Git na Unity - Gaming For All 2021
PDF
Framework web 01 - Aula UTFPR 2018
PDF
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
PPTX
Unit Test JavaScript
PDF
Desenvolvendo uma App multiplataforma compartilhando 90% do código
PDF
Criando e consumindo webservice REST com PHP e JSON
PPT
PDF
Javascript por debaixo dos panos
Workshop react + adonis.js
Ferramentas Livres Para Desenvolvimento com PHP
Webservices
Aula Introdução a VRaptor 4 - Pós Java UTFPR
Introdução APIs RESTful
REST - The right way
Zend Framework
.NET 6: O que há de novo e o que está por vir?
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
A Evolução do Front end
Zend Framework
9 erros que desenvolvedores Node.js cometem
Usando Git na Unity - Gaming For All 2021
Framework web 01 - Aula UTFPR 2018
Dividindo responsabilidades com VRaptor, Rest, HTML5 e CSS3
Unit Test JavaScript
Desenvolvendo uma App multiplataforma compartilhando 90% do código
Criando e consumindo webservice REST com PHP e JSON
Javascript por debaixo dos panos
Anúncio

Semelhante a APIs Rest(Ful): como fazer, por Alex Piaz (20)

PDF
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan Scafi
PDF
PyData - Consumindo e publicando web APIs com Python
PDF
Rest Java One
PDF
Palestra UFPR - Intro Ionic framework + WordPress
PPTX
Rest workshop
ODP
Alta perfomance de aplicações PHP com Nginx
PPTX
Um pouco sobre APIs
PPTX
WebAPI-Route-Translate-BasicAuth
PDF
php4android: desenvolva aplicações android em PHP
PDF
De Web Services RESTful a Aplicações Mashup
PPTX
Criando aplicativos para Windows 8 usando apenas HTML5 e Javascript
PDF
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
PPTX
Conhecendo os recursos do ASP.NET Web API
PDF
2290494 integrando-flex-com-php
PDF
Ligação do Flex a um backend LAMP usando AMFPHP
PPT
Python cherrypy
PPTX
REST and JEE
PDF
Rest fuuuu front-end
PPT
Web Sphere
KEY
Plack
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan Scafi
PyData - Consumindo e publicando web APIs com Python
Rest Java One
Palestra UFPR - Intro Ionic framework + WordPress
Rest workshop
Alta perfomance de aplicações PHP com Nginx
Um pouco sobre APIs
WebAPI-Route-Translate-BasicAuth
php4android: desenvolva aplicações android em PHP
De Web Services RESTful a Aplicações Mashup
Criando aplicativos para Windows 8 usando apenas HTML5 e Javascript
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
Conhecendo os recursos do ASP.NET Web API
2290494 integrando-flex-com-php
Ligação do Flex a um backend LAMP usando AMFPHP
Python cherrypy
REST and JEE
Rest fuuuu front-end
Web Sphere
Plack
Anúncio

Mais de iMasters (20)

PPTX
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
PDF
Postgres: wanted, beloved or dreaded? - Fabio Telles
PPTX
Por que minha query esta lenta? - Suellen Moraes
PPTX
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
PDF
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
PPTX
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
PDF
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
PDF
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
PDF
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
PDF
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
PDF
Entendendo os porquês do seu servidor - Talita Bernardes
PDF
Backend performático além do "coloca mais máquina lá" - Diana Arnos
PPTX
Dicas para uma maior performance em APIs REST - Renato Groffe
PPTX
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
PDF
Quem se importa com acessibilidade Web? - Mauricio Maujor
PDF
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
PDF
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
PDF
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
PDF
Construindo aplicações mais confiantes - Carolina Karklis
PDF
Monitoramento de Aplicações - Felipe Regalgo
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
Postgres: wanted, beloved or dreaded? - Fabio Telles
Por que minha query esta lenta? - Suellen Moraes
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Entendendo os porquês do seu servidor - Talita Bernardes
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Dicas para uma maior performance em APIs REST - Renato Groffe
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
Quem se importa com acessibilidade Web? - Mauricio Maujor
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Construindo aplicações mais confiantes - Carolina Karklis
Monitoramento de Aplicações - Felipe Regalgo

Último (6)

PDF
PROJETO DE PESQUISA PRONTO FONOAUDIOLOGIA 2025 ABNT.pdf
PDF
Agosto-Lilas-Conscientizacao-e-Combate-a-Violencia-contra-a-Mulher.pdf
PDF
PROJETO DE PESQUISA PRONTO ESTÉTICA 2025 ABNT.pdf
PPT
Aula_15.pptssssssssssssssssssssssssssssssssssssss
PPTX
AULA_12_BASQUETE CAPACIDADE FÍSICA_171023.pptx
PDF
Certificado de Conclusão Jornada Inteligência Artificial
PROJETO DE PESQUISA PRONTO FONOAUDIOLOGIA 2025 ABNT.pdf
Agosto-Lilas-Conscientizacao-e-Combate-a-Violencia-contra-a-Mulher.pdf
PROJETO DE PESQUISA PRONTO ESTÉTICA 2025 ABNT.pdf
Aula_15.pptssssssssssssssssssssssssssssssssssssss
AULA_12_BASQUETE CAPACIDADE FÍSICA_171023.pptx
Certificado de Conclusão Jornada Inteligência Artificial

APIs Rest(Ful): como fazer, por Alex Piaz