SlideShare a Scribd company logo
1 of 59
Download to read offline
Introdução APIs
RESTful
Douglas V. Pasqua
HTTP Basics
HTTP Características
● Método Request - Response
● URL (Uniform Resource Locator)
● Verbos GET, POST, PUT, etc..
● Permite Negociação de Dados
● StateLess
HTTP Requests
GET /users/douglas HTTP/1.1
Host: example.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP Requests
GET /users/douglas HTTP/1.1
Host: example.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Verbos: GET, POST, PUT, DELETE,
PATCH
HTTP Requests
GET /users/douglas HTTP/1.1
Host: example.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
URI: Uniform Resource Identfier
HTTP Requests
GET /users/douglas HTTP/1.1
Host: example.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Headers
Http Responses
HTTP/1.1 200 OK
Connection: close
Content-Type: text/html; charset=UTF-8
<html>
….
Http Responses
HTTP/1.1 200 OK
Connection: close
Content-Type: text/html; charset=UTF-8
<html>
….
Status Code “Comuns”
200 - OK 403 - Forbidden
201 - Created 404 - Not found
301 - Moved Permanently 410 - Gone
302 - Found 500 - Internal Server Error
304 - Not Modified 501 - Not Implemented
400 - Bad Request 502 - Bad Gateway
401 - Unauthorized 503 - Service Unavailable
https://pt.wikipedia.org/wiki/Lista_de_c%C3%B3digos_de_status_HTTP
Http Responses
HTTP/1.1 200 OK
Connection: close
Content-Type: text/html; charset=UTF-8
<html>
….
Http Responses
HTTP/1.1 200 OK
Connection: close
Content-Type: text/html; charset=UTF-8
<html>
….
BODY
Post - Exemplo
<form action="/usuarios/cadastrar.php" method="post">
Nome:<br />
<input type="text" name="nome"><br />
Sobrenome:<br />
<input type="text" name="sobrenome">
<input type="submit" value="cadastrar">
</form>
Post - Exemplo
POST /usuarios/cadastrar.php HTTP/1.1
Host: example.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
nome=Douglas&sobrenome=V.+Pasqua
Webservices
Client
● Pcs
● Macs
● Mobile devices
● Outras aplicações
● etc..
Principais Serviços
● Remote Procedure Call (RPC)
● SOAP
● REST
REST é Popular
Webservices REST
Características REST
● Conjunto de princípios/idéias para criação de Webservices
● Não esta amarrado exclusivamente ao HTTP
● Porém HTTP é amplamente usado e fornece enormes vantagens ao REST
● Uma API REST bem desenhada basicamente faz uso:
○ URIs Individuais por recurso.
○ Verbos HTTP (POST, PUT, GET e DELETE).
○ Uso apropriado de Headers HTTP e Status code de resposta de requisições.
○ Múltiplas opções de formatos de representação de recursos (JSON, XML, etc.)
○ Controles de hipermídia.
Vantagens REST
● Simplicidade
● Múltiplos tipos de formato de representação (JSON, XML, etc.)
● Parse de JSON é veloz
● JSON tem suporte nativo em Javascript
● JSON pode ser lido e escrito em qualquer linguagem de programação
● Cache
● Facilidade em escalabilidade
URIs Individuaís por Recurso
http://api.example.net/cantores/michaeljackson
http://api.example.net/albums/thisisit
http://api.example.net/cantores/
http://api.example.net/albums/
http://api.example.net/albums/michaeljackson
Uso de Verbos HTTP - Griando (POST)
Requisição
POST /livros
Content-type: application/json
{
"titulo":"My New Book",
"autor":"Autor Foo",
"isbn":"111-11-1111-111-1"
}
Uso de Verbos HTTP - Griando (POST)
Requisição
POST /livros
Content-type: application/json
{
"titulo":"My New Book",
"autor":"Autor Foo",
"isbn":"111-11-1111-111-1"
}
Resposta
HTTP/1.1 201 Created
Host: localhost
Connection: close
Cache-Control: no-cache
Location: /livros/4
Uso de Verbos HTTP - Griando (POST)
Requisição
POST /livros
Content-type: application/json
{
"titulo":"My New Book",
"autor":"Autor Foo",
"isbn":"111-11-1111-111-1"
}
Resposta
HTTP/1.1 201 Created
Host: localhost
Connection: close
Cache-Control: no-cache
Location: /livros/4
Status Code
201 Created
400 Bad Request
406 Not acceptable
Uso de Verbos HTTP - Consultando (GET)
Requisição
GET /livros/4
GET /livros
Uso de Verbos HTTP - Consultando (GET)
Requisição
GET /livros/4
GET /livros
Resposta
HTTP/1.1 200 OK
Host: localhost
Connection: close
Content-type: application/json
{"titulo":"My New Book", "autor":"Autor Foo",
"isbn":"111-11-1111-111-1"}
Uso de Verbos HTTP - Consultando (GET)
Requisição
GET /livros/4
GET /livros
Resposta
HTTP/1.1 200 OK
Host: localhost
Connection: close
Content-type: application/json
{"titulo":"My New Book", "autor":"Autor Foo",
"isbn":"111-11-1111-111-1"}Status Code
200 OK
404 Not Found
Uso de Verbos HTTP - Atualizando (PUT)
Requisição
PUT /livros/4
Content-type: application/json
{
"titulo":"My Book",
"autor":"Autor Qualquer",
"isbn":"111-11-1111-111-1"
}
Uso de Verbos HTTP - Atualizando (PUT)
Requisição
PUT /livros/4
Content-type: application/json
{
"titulo":"My Book",
"autor":"Autor Qualquer",
"isbn":"111-11-1111-111-1"
}
Resposta
HTTP/1.1 200 OK
Host: localhost
Connection: close
Cache-Control: no-cache
Content-type: application/json
{"titulo":"My Book", "autor":"Autor Qualquer",
"isbn":"111-11-1111-111-1"}
Uso de Verbos HTTP - Atualizando (PUT)
Requisição
PUT /livros/4
Content-type: application/json
{
"titulo":"My Book",
"autor":"Autor Qualquer",
"isbn":"111-11-1111-111-1"
}
Resposta
HTTP/1.1 200 OK
Host: localhost
Connection: close
Cache-Control: no-cache
Content-type: application/json
{"titulo":"My Book", "autor":"Autor Qualquer",
"isbn":"111-11-1111-111-1"}
Status Code
200 OK
400 Bad Request
406 Not acceptable
Uso de Verbos HTTP - Atualizando (PATCH)
Requisição
PATCH /livros/4
Content-type: application/json
{
"autor":"Autor XPTO",
}
Uso de Verbos HTTP - Atualizando (PATCH)
Requisição
PATCH /livros/4
Content-type: application/json
{
"autor":"Autor XPTO",
}
Resposta
HTTP/1.1 200 OK
Host: localhost
Connection: close
Cache-Control: no-cache
Content-type: application/json
{"titulo":"My Book", "autor":"Autor XPTO",
"isbn":"111-11-1111-111-1"}
Uso de Verbos HTTP - Atualizando (PATCH)
Requisição
PATCH /livros/4
Content-type: application/json
{
"autor":"Autor XPTO",
}
Resposta
HTTP/1.1 200 OK
Host: localhost
Connection: close
Cache-Control: no-cache
Content-type: application/json
{"titulo":"My Book", "autor":"Autor XPTO",
"isbn":"111-11-1111-111-1"}
Status Code
200 OK
400 Bad Request
406 Not acceptable
Uso de Verbos HTTP - Atualizando (PATCH)
Requisição
PATCH /livros/4
Content-type: application/json
{
"autor":"Autor XPTO",
}
Resposta
HTTP/1.1 200 OK
Host: localhost
Connection: close
Cache-Control: no-cache
Content-type: application/json
{"titulo":"My Book", "autor":"Autor XPTO",
"isbn":"111-11-1111-111-1"}
Status Code
200 OK
400 Bad Request
406 Not acceptable
Uso de Verbos HTTP - (Aternativa PATCH -> PUT)
Requisição
PUT /livros/4/autor
Content-type: application/json
{
"autor":"Autor XPTO",
}
Resposta
HTTP/1.1 200 OK
Host: localhost
Connection: close
Cache-Control: no-cache
Content-type: application/json
{"titulo":"My Book", "autor":"Autor XPTO",
"isbn":"111-11-1111-111-1"}
Status Code
200 OK
400 Bad Request
406 Not acceptable
Uso de Verbos HTTP - Removendo (DELETE)
Requisição
DELETE /livros/4
Uso de Verbos HTTP - Removendo (DELETE)
Requisição
DELETE /livros/4
Resposta
HTTP/1.1 204 No Content
Host: localhost
Connection: close
Uso de Verbos HTTP - Removendo (DELETE)
Requisição
DELETE /livros/4
Resposta
HTTP/1.1 204 No Content
Host: localhost
Connection: close
Status Code
204 No Content
404 Not Found
Formatos de Representação
● JSON
● XML
● etc...
Formatos de Representação - Mime Type
application/json
application/xml
JSON
XML
Formatos de Representação - Resposta
Content-type: application/json
Content-type: application/xml
JSON
XML
Formatos de Representação - Requisitando
Accept: application/json
Accept: application/xml
JSON
XML
Be Stateless (sem estado)
● Cada requisição pode ser tratada isoladamente pelo webservice.
● Simplifica o design da aplicação. Não há necessidade de gerenciar
interações prévias do usuário.
● Facilita escalabilidade.
● O Próprio protocolo HTTP é Stateless.
Controles de hipermídia
● Fornece “Links” para consumidores da API. Permitindo acessarem outros
recursos relacionados. Como se fossem usuários clicando em links e
botões na internet.
{
"titulo":"My Book",
"autor":"Autor XPTO",
"isbn":"111-11-1111-111-1",
"autorURL":"https://api.livros.example.net/autor/Autor XPTO",
"autorLivrosURL":"https://api.livros.example.net/autor/Autor XPTO/livros"
}
Controles de hipermídia
● HAL - Hypertext Application Language
application/hal+json
APIs com bom design - maturidade
● Richardson Maturity Model
○ Level0: RPC básico, centralizado em único endpoint. (Sem uso de recursos HTTP)
○ Level1: Expor recursos através de URIs individuais.
○ Level2: Usar Verbos HTTP, Uso adequado dos códgios de status e Headers.
○ Level3: Controler de hipermídia.
Autenticação
● Basic
● Digest
● OAuth2
● Token Based
● JWT
Autenticação - Código de Status
● 401 Not Authorized (Não Autorizado)
● 403 Forbidden (Proibido)
Outros Pontos importantes a considerar
em sua API
Cache
● Ações não deve ser colocadas em cache (POST, PUT, DELETE, PATCH).
● Solicitações GET podem.
● Realizar o controle no lado do servidor com headers:
○ Last-Modified
○ ETag
● Caso informação não precise ser atualizada, informar:
○ 304, Not modified
Versionamento
URL:
http://api.example.net/v2/cantores/michaeljackson
http://api.example.net/v2/albums/thisisit
Content-type:
Accept: application/vnd.music.v2+json
Limites
● Permitir que o resultado de consultas sejam customizadas.
○ Utilizar Paginação de dados.
○ Permitir uma maneira de especificar intervalo de resultados (offset, limit).
○ Permitir especificar quais dados devem retornar (campos).
● Limitar taxa de acesso
○ Quantidade de acesso por período de tempo por usuário.
○ Regras diferentes para usuários pagos.
Tratamento de Erros
● Formato de saída de acordo com a expectativa do usuário
○ JSON -> JSON
○ XML -> XML
○ HTML -> HTML
○ etc..
● Utilize mensagens de erro significativas.
○ falta informar parâmetro? formato usado é valido ? função chamada não existe ? falta
privilégios para efetuar a requisição ? etc..
Documentação
“Boas APIs possuem boa Documentação”
Documentação
● Documentação interativa
http://apidocjs.com/
http://swagger.io/
http://www.mashery.com/api/io-docs
Ferramentas de Apoio
● apigility (https://apigility.org/)
● Amazon API Gateway (https://aws.amazon.com/pt/api-gateway/)
● swagger (http://swagger.io/)
Referências
http://www.novatec.com.br/livros/webservices-php/
http://restcookbook.com/
http://www.restapitutorial.com/httpstatuscodes.html
http://martinfowler.com/articles/richardsonMaturityModel.html
http://www.douglaspasqua.com/category/rest/

More Related Content

What's hot

Understanding REST
Understanding RESTUnderstanding REST
Understanding RESTNitin Pande
 
REST-API overview / concepts
REST-API overview / conceptsREST-API overview / concepts
REST-API overview / conceptsPatrick Savalle
 
Introduction to .NET Core
Introduction to .NET CoreIntroduction to .NET Core
Introduction to .NET CoreMarco Parenzan
 
Understanding REST APIs in 5 Simple Steps
Understanding REST APIs in 5 Simple StepsUnderstanding REST APIs in 5 Simple Steps
Understanding REST APIs in 5 Simple StepsTessa Mero
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)Yacine Rezgui
 
Introdução ao ASP .NET Web API
Introdução ao ASP .NET Web APIIntrodução ao ASP .NET Web API
Introdução ao ASP .NET Web APIVinicius Mussak
 
Introducing Swagger
Introducing SwaggerIntroducing Swagger
Introducing SwaggerTony Tam
 
Java Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepJava Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepGuo Albert
 
Introdução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptxIntrodução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptxMarceloRosenbrock1
 
Rest api standards and best practices
Rest api standards and best practicesRest api standards and best practices
Rest api standards and best practicesAnkita Mahajan
 
What is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaWhat is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaEdureka!
 
Angular and The Case for RxJS
Angular and The Case for RxJSAngular and The Case for RxJS
Angular and The Case for RxJSSandi Barr
 
Introduction to the Web API
Introduction to the Web APIIntroduction to the Web API
Introduction to the Web APIBrad Genereaux
 

What's hot (20)

Understanding REST
Understanding RESTUnderstanding REST
Understanding REST
 
Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
Apresentação rest api
Apresentação rest apiApresentação rest api
Apresentação rest api
 
REST & RESTful Web Services
REST & RESTful Web ServicesREST & RESTful Web Services
REST & RESTful Web Services
 
REST-API overview / concepts
REST-API overview / conceptsREST-API overview / concepts
REST-API overview / concepts
 
Introduction to .NET Core
Introduction to .NET CoreIntroduction to .NET Core
Introduction to .NET Core
 
RESTful API - Best Practices
RESTful API - Best PracticesRESTful API - Best Practices
RESTful API - Best Practices
 
Understanding REST APIs in 5 Simple Steps
Understanding REST APIs in 5 Simple StepsUnderstanding REST APIs in 5 Simple Steps
Understanding REST APIs in 5 Simple Steps
 
AngularJS - Présentation (french)
AngularJS - Présentation (french)AngularJS - Présentation (french)
AngularJS - Présentation (french)
 
Web api
Web apiWeb api
Web api
 
Introdução ao ASP .NET Web API
Introdução ao ASP .NET Web APIIntrodução ao ASP .NET Web API
Introdução ao ASP .NET Web API
 
Introducing Swagger
Introducing SwaggerIntroducing Swagger
Introducing Swagger
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Java Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By StepJava Persistence API (JPA) Step By Step
Java Persistence API (JPA) Step By Step
 
Introdução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptxIntrodução ao desenvolvimento da web.pptx
Introdução ao desenvolvimento da web.pptx
 
Rest api standards and best practices
Rest api standards and best practicesRest api standards and best practices
Rest api standards and best practices
 
What is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | EdurekaWhat is REST API? REST API Concepts and Examples | Edureka
What is REST API? REST API Concepts and Examples | Edureka
 
Web API Basics
Web API BasicsWeb API Basics
Web API Basics
 
Angular and The Case for RxJS
Angular and The Case for RxJSAngular and The Case for RxJS
Angular and The Case for RxJS
 
Introduction to the Web API
Introduction to the Web APIIntroduction to the Web API
Introduction to the Web API
 

Similar to Introdução APIs RESTful

Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixAndré Déo
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com SpringMateus Malaquias
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com JavaJugVale
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no androidAlexandre Antunes
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]Igor Santos
 
PHP RESTful Web Services - PHPConf'09
PHP RESTful Web Services - PHPConf'09PHP RESTful Web Services - PHPConf'09
PHP RESTful Web Services - PHPConf'09Felipe Ribeiro
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxThiago Paes
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com JavajesuinoPower
 
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e VarnishEscalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e VarnishLucas Brasilino
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupWagner Roberto dos Santos
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0jesuinoPower
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkMario Guedes
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPCarlos Santos
 
Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONMario Guedes
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]Filipe Ximenes
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIComunidade NetPonto
 

Similar to Introdução APIs RESTful (20)

Rest workshop
Rest workshopRest workshop
Rest workshop
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com Zabbix
 
Construindo APIs RESTful com Spring
Construindo APIs RESTful com SpringConstruindo APIs RESTful com Spring
Construindo APIs RESTful com Spring
 
A Web é uma API
A Web é uma APIA Web é uma API
A Web é uma API
 
REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
 
Web apis
Web apisWeb apis
Web apis
 
Consumindo dados via web service no android
Consumindo dados via web service no androidConsumindo dados via web service no android
Consumindo dados via web service no android
 
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
REST-fuuuu - Boas práticas RESTful [PHPeste 2017]
 
PHP RESTful Web Services - PHPConf'09
PHP RESTful Web Services - PHPConf'09PHP RESTful Web Services - PHPConf'09
PHP RESTful Web Services - PHPConf'09
 
Alta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com NginxAlta perfomance de aplicações PHP com Nginx
Alta perfomance de aplicações PHP com Nginx
 
PHP 5.3 - Introdução
PHP 5.3 - IntroduçãoPHP 5.3 - Introdução
PHP 5.3 - Introdução
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com Java
 
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e VarnishEscalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
Escalabilidade e performance da infraestrutura Plone/Zope com CacheFU e Varnish
 
De Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações MashupDe Web Services RESTful a Aplicações Mashup
De Web Services RESTful a Aplicações Mashup
 
Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0Novidades do JAX-RS 2.0
Novidades do JAX-RS 2.0
 
Conhecendo o Novo REST Framework
Conhecendo o Novo REST FrameworkConhecendo o Novo REST Framework
Conhecendo o Novo REST Framework
 
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHPLabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
LabMM4 (T10 - 12/13) - Tecnologias server-side - PHP
 
Integrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSONIntegrando sua App ao Mundo via REST/JSON
Integrando sua App ao Mundo via REST/JSON
 
O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]O que é esse tal de rest? [PyBR2016]
O que é esse tal de rest? [PyBR2016]
 
Uma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web APIUma Introdução a ASP.NET Web API
Uma Introdução a ASP.NET Web API
 

More from Douglas V. Pasqua

Graph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para FacebookGraph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para FacebookDouglas V. Pasqua
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php segurosDouglas V. Pasqua
 
Unicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de CaracteresUnicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de CaracteresDouglas V. Pasqua
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresDouglas V. Pasqua
 
Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Douglas V. Pasqua
 

More from Douglas V. Pasqua (9)

Graph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para FacebookGraph API - Desenvolvimento para Facebook
Graph API - Desenvolvimento para Facebook
 
Web Services RESTful
Web Services RESTfulWeb Services RESTful
Web Services RESTful
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
 
Unicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de CaracteresUnicode: Os segredos da Codificação de Caracteres
Unicode: Os segredos da Codificação de Caracteres
 
The Facebook Plataform
The Facebook PlataformThe Facebook Plataform
The Facebook Plataform
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3Novas Funcionalidade no PHP 5.3
Novas Funcionalidade no PHP 5.3
 
Segurança Web com PHP5
Segurança Web com PHP5Segurança Web com PHP5
Segurança Web com PHP5
 

Introdução APIs RESTful

  • 3. HTTP Características ● Método Request - Response ● URL (Uniform Resource Locator) ● Verbos GET, POST, PUT, etc.. ● Permite Negociação de Dados ● StateLess
  • 4. HTTP Requests GET /users/douglas HTTP/1.1 Host: example.net User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  • 5. HTTP Requests GET /users/douglas HTTP/1.1 Host: example.net User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Verbos: GET, POST, PUT, DELETE, PATCH
  • 6. HTTP Requests GET /users/douglas HTTP/1.1 Host: example.net User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 URI: Uniform Resource Identfier
  • 7. HTTP Requests GET /users/douglas HTTP/1.1 Host: example.net User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Headers
  • 8. Http Responses HTTP/1.1 200 OK Connection: close Content-Type: text/html; charset=UTF-8 <html> ….
  • 9. Http Responses HTTP/1.1 200 OK Connection: close Content-Type: text/html; charset=UTF-8 <html> ….
  • 10. Status Code “Comuns” 200 - OK 403 - Forbidden 201 - Created 404 - Not found 301 - Moved Permanently 410 - Gone 302 - Found 500 - Internal Server Error 304 - Not Modified 501 - Not Implemented 400 - Bad Request 502 - Bad Gateway 401 - Unauthorized 503 - Service Unavailable https://pt.wikipedia.org/wiki/Lista_de_c%C3%B3digos_de_status_HTTP
  • 11. Http Responses HTTP/1.1 200 OK Connection: close Content-Type: text/html; charset=UTF-8 <html> ….
  • 12. Http Responses HTTP/1.1 200 OK Connection: close Content-Type: text/html; charset=UTF-8 <html> …. BODY
  • 13. Post - Exemplo <form action="/usuarios/cadastrar.php" method="post"> Nome:<br /> <input type="text" name="nome"><br /> Sobrenome:<br /> <input type="text" name="sobrenome"> <input type="submit" value="cadastrar"> </form>
  • 14. Post - Exemplo POST /usuarios/cadastrar.php HTTP/1.1 Host: example.net User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Content-Type: application/x-www-form-urlencoded Content-Length: 32 nome=Douglas&sobrenome=V.+Pasqua
  • 16.
  • 17. Client ● Pcs ● Macs ● Mobile devices ● Outras aplicações ● etc..
  • 18. Principais Serviços ● Remote Procedure Call (RPC) ● SOAP ● REST
  • 21. Características REST ● Conjunto de princípios/idéias para criação de Webservices ● Não esta amarrado exclusivamente ao HTTP ● Porém HTTP é amplamente usado e fornece enormes vantagens ao REST ● Uma API REST bem desenhada basicamente faz uso: ○ URIs Individuais por recurso. ○ Verbos HTTP (POST, PUT, GET e DELETE). ○ Uso apropriado de Headers HTTP e Status code de resposta de requisições. ○ Múltiplas opções de formatos de representação de recursos (JSON, XML, etc.) ○ Controles de hipermídia.
  • 22. Vantagens REST ● Simplicidade ● Múltiplos tipos de formato de representação (JSON, XML, etc.) ● Parse de JSON é veloz ● JSON tem suporte nativo em Javascript ● JSON pode ser lido e escrito em qualquer linguagem de programação ● Cache ● Facilidade em escalabilidade
  • 23. URIs Individuaís por Recurso http://api.example.net/cantores/michaeljackson http://api.example.net/albums/thisisit http://api.example.net/cantores/ http://api.example.net/albums/ http://api.example.net/albums/michaeljackson
  • 24. Uso de Verbos HTTP - Griando (POST) Requisição POST /livros Content-type: application/json { "titulo":"My New Book", "autor":"Autor Foo", "isbn":"111-11-1111-111-1" }
  • 25. Uso de Verbos HTTP - Griando (POST) Requisição POST /livros Content-type: application/json { "titulo":"My New Book", "autor":"Autor Foo", "isbn":"111-11-1111-111-1" } Resposta HTTP/1.1 201 Created Host: localhost Connection: close Cache-Control: no-cache Location: /livros/4
  • 26. Uso de Verbos HTTP - Griando (POST) Requisição POST /livros Content-type: application/json { "titulo":"My New Book", "autor":"Autor Foo", "isbn":"111-11-1111-111-1" } Resposta HTTP/1.1 201 Created Host: localhost Connection: close Cache-Control: no-cache Location: /livros/4 Status Code 201 Created 400 Bad Request 406 Not acceptable
  • 27. Uso de Verbos HTTP - Consultando (GET) Requisição GET /livros/4 GET /livros
  • 28. Uso de Verbos HTTP - Consultando (GET) Requisição GET /livros/4 GET /livros Resposta HTTP/1.1 200 OK Host: localhost Connection: close Content-type: application/json {"titulo":"My New Book", "autor":"Autor Foo", "isbn":"111-11-1111-111-1"}
  • 29. Uso de Verbos HTTP - Consultando (GET) Requisição GET /livros/4 GET /livros Resposta HTTP/1.1 200 OK Host: localhost Connection: close Content-type: application/json {"titulo":"My New Book", "autor":"Autor Foo", "isbn":"111-11-1111-111-1"}Status Code 200 OK 404 Not Found
  • 30. Uso de Verbos HTTP - Atualizando (PUT) Requisição PUT /livros/4 Content-type: application/json { "titulo":"My Book", "autor":"Autor Qualquer", "isbn":"111-11-1111-111-1" }
  • 31. Uso de Verbos HTTP - Atualizando (PUT) Requisição PUT /livros/4 Content-type: application/json { "titulo":"My Book", "autor":"Autor Qualquer", "isbn":"111-11-1111-111-1" } Resposta HTTP/1.1 200 OK Host: localhost Connection: close Cache-Control: no-cache Content-type: application/json {"titulo":"My Book", "autor":"Autor Qualquer", "isbn":"111-11-1111-111-1"}
  • 32. Uso de Verbos HTTP - Atualizando (PUT) Requisição PUT /livros/4 Content-type: application/json { "titulo":"My Book", "autor":"Autor Qualquer", "isbn":"111-11-1111-111-1" } Resposta HTTP/1.1 200 OK Host: localhost Connection: close Cache-Control: no-cache Content-type: application/json {"titulo":"My Book", "autor":"Autor Qualquer", "isbn":"111-11-1111-111-1"} Status Code 200 OK 400 Bad Request 406 Not acceptable
  • 33. Uso de Verbos HTTP - Atualizando (PATCH) Requisição PATCH /livros/4 Content-type: application/json { "autor":"Autor XPTO", }
  • 34. Uso de Verbos HTTP - Atualizando (PATCH) Requisição PATCH /livros/4 Content-type: application/json { "autor":"Autor XPTO", } Resposta HTTP/1.1 200 OK Host: localhost Connection: close Cache-Control: no-cache Content-type: application/json {"titulo":"My Book", "autor":"Autor XPTO", "isbn":"111-11-1111-111-1"}
  • 35. Uso de Verbos HTTP - Atualizando (PATCH) Requisição PATCH /livros/4 Content-type: application/json { "autor":"Autor XPTO", } Resposta HTTP/1.1 200 OK Host: localhost Connection: close Cache-Control: no-cache Content-type: application/json {"titulo":"My Book", "autor":"Autor XPTO", "isbn":"111-11-1111-111-1"} Status Code 200 OK 400 Bad Request 406 Not acceptable
  • 36. Uso de Verbos HTTP - Atualizando (PATCH) Requisição PATCH /livros/4 Content-type: application/json { "autor":"Autor XPTO", } Resposta HTTP/1.1 200 OK Host: localhost Connection: close Cache-Control: no-cache Content-type: application/json {"titulo":"My Book", "autor":"Autor XPTO", "isbn":"111-11-1111-111-1"} Status Code 200 OK 400 Bad Request 406 Not acceptable
  • 37. Uso de Verbos HTTP - (Aternativa PATCH -> PUT) Requisição PUT /livros/4/autor Content-type: application/json { "autor":"Autor XPTO", } Resposta HTTP/1.1 200 OK Host: localhost Connection: close Cache-Control: no-cache Content-type: application/json {"titulo":"My Book", "autor":"Autor XPTO", "isbn":"111-11-1111-111-1"} Status Code 200 OK 400 Bad Request 406 Not acceptable
  • 38. Uso de Verbos HTTP - Removendo (DELETE) Requisição DELETE /livros/4
  • 39. Uso de Verbos HTTP - Removendo (DELETE) Requisição DELETE /livros/4 Resposta HTTP/1.1 204 No Content Host: localhost Connection: close
  • 40. Uso de Verbos HTTP - Removendo (DELETE) Requisição DELETE /livros/4 Resposta HTTP/1.1 204 No Content Host: localhost Connection: close Status Code 204 No Content 404 Not Found
  • 41. Formatos de Representação ● JSON ● XML ● etc...
  • 42. Formatos de Representação - Mime Type application/json application/xml JSON XML
  • 43. Formatos de Representação - Resposta Content-type: application/json Content-type: application/xml JSON XML
  • 44. Formatos de Representação - Requisitando Accept: application/json Accept: application/xml JSON XML
  • 45. Be Stateless (sem estado) ● Cada requisição pode ser tratada isoladamente pelo webservice. ● Simplifica o design da aplicação. Não há necessidade de gerenciar interações prévias do usuário. ● Facilita escalabilidade. ● O Próprio protocolo HTTP é Stateless.
  • 46. Controles de hipermídia ● Fornece “Links” para consumidores da API. Permitindo acessarem outros recursos relacionados. Como se fossem usuários clicando em links e botões na internet. { "titulo":"My Book", "autor":"Autor XPTO", "isbn":"111-11-1111-111-1", "autorURL":"https://api.livros.example.net/autor/Autor XPTO", "autorLivrosURL":"https://api.livros.example.net/autor/Autor XPTO/livros" }
  • 47. Controles de hipermídia ● HAL - Hypertext Application Language application/hal+json
  • 48. APIs com bom design - maturidade ● Richardson Maturity Model ○ Level0: RPC básico, centralizado em único endpoint. (Sem uso de recursos HTTP) ○ Level1: Expor recursos através de URIs individuais. ○ Level2: Usar Verbos HTTP, Uso adequado dos códgios de status e Headers. ○ Level3: Controler de hipermídia.
  • 49. Autenticação ● Basic ● Digest ● OAuth2 ● Token Based ● JWT
  • 50. Autenticação - Código de Status ● 401 Not Authorized (Não Autorizado) ● 403 Forbidden (Proibido)
  • 51. Outros Pontos importantes a considerar em sua API
  • 52. Cache ● Ações não deve ser colocadas em cache (POST, PUT, DELETE, PATCH). ● Solicitações GET podem. ● Realizar o controle no lado do servidor com headers: ○ Last-Modified ○ ETag ● Caso informação não precise ser atualizada, informar: ○ 304, Not modified
  • 54. Limites ● Permitir que o resultado de consultas sejam customizadas. ○ Utilizar Paginação de dados. ○ Permitir uma maneira de especificar intervalo de resultados (offset, limit). ○ Permitir especificar quais dados devem retornar (campos). ● Limitar taxa de acesso ○ Quantidade de acesso por período de tempo por usuário. ○ Regras diferentes para usuários pagos.
  • 55. Tratamento de Erros ● Formato de saída de acordo com a expectativa do usuário ○ JSON -> JSON ○ XML -> XML ○ HTML -> HTML ○ etc.. ● Utilize mensagens de erro significativas. ○ falta informar parâmetro? formato usado é valido ? função chamada não existe ? falta privilégios para efetuar a requisição ? etc..
  • 56. Documentação “Boas APIs possuem boa Documentação”
  • 58. Ferramentas de Apoio ● apigility (https://apigility.org/) ● Amazon API Gateway (https://aws.amazon.com/pt/api-gateway/) ● swagger (http://swagger.io/)