Web Services RESTful
Introdução e Conceitos
Por Douglas V. Pasqua
http://douglaspasqua.com
Pasqua Tecnologia - http://douglaspasqua.com 2
Palestrante
● Douglas Pasqua
– Desenvolvedor PHP / Java
– Especialista Linux
– Desde 2002
– LPIC-1, LPIC-2, PHP ZCE, Java
SCJP
– Instrutor e Palestrante
– http://douglaspasqua.com
Pasqua Tecnologia - http://douglaspasqua.com 3
O que é REST ?
● REpresentational State Transfer (Transferência de
Estado Representacional)
● É um estilo arquitetural para criação de aplicações
distribuídas
● Termo criado por Roy Fielding no ano de 2000 em
uma tese de Doutorado - “Architectural Styles and the
Design of Network-based Software Architectures”
● É totalmente independente do HTTP e da Web
● Sua utilização mais comum são APIs usando HTTP
Pasqua Tecnologia - http://douglaspasqua.com 4
Restrições do REST
1)Client-server
2)Stateless
3)Cache
4)Uniforme Interface
5)Layered System
6)Code-On-Demand (opcional)
Pasqua Tecnologia - http://douglaspasqua.com 5
1. Client-Server
● Objetivo é separar as duas arquiteturas
● Desenvolvimento dos dois são independentes
● Cliente não se preocupa com DB, log, cache, etc.
● Servidor não se preocupa com UX, etc.
Pasqua Tecnologia - http://douglaspasqua.com 6
2.Stateless
● Requisições devem ser
independentes
● O servidor não deve guardar
estado do cliente
● O estado deve ser gerenciado no
lado do cliente (sessions)
● Facilita design da arquitetura
● Facilita escalabilidade
● Facilita
monitoração/depuração
Pasqua Tecnologia - http://douglaspasqua.com 7
3.Cache
● Informar ao cliente se
os dados de uma
requisição podem ou
não ser guardados
em cache
● Melhorar:
● Escalabilidade
● Performance
Pasqua Tecnologia - http://douglaspasqua.com 8
4.Uniforme Interface
● Define interface entre
o cliente e servidor
● Simplifica e
desacopla a
arquitetura
● Permitindo as duas
partes evoluir
independentemente
1) Baseado em
Recursos
2) Representação do
Recurso
3)Mensagens auto
descritivas
4)Hypermedia
Pasqua Tecnologia - http://douglaspasqua.com 9
4.1. Baseado em Recursos
● Recursos individuais devem ser identificados
em requisições usando URIs específicas e
coesas.
http://api.example.net/cantor/michaeljackson
http://api.example.net/album/thisisit
Pasqua Tecnologia - http://douglaspasqua.com 10
4.2. Representação
● Define a foram como o recurso deve ser
retornado para o cliente
● JSON
● XML
● TXT
● HTML
● ...
Pasqua Tecnologia - http://douglaspasqua.com 11
4.3. Mensagens Auto descritivas
● Cada representação deve conter a informação
de como ela deve ser processada.
● Mime-types
● application/json
● application/xml
● text/plain
Pasqua Tecnologia - http://douglaspasqua.com 12
4.4. Hypermedia
● A representação deve fornecer “links” (body ou
headers) que permitem obter o próprio recurso
ou relacionados.
Pasqua Tecnologia - http://douglaspasqua.com 13
5. Layered System
● Sugere que o cliente não deve conectar diretamente
ao servidor, mas sim em um intermediador.
● Facilita escalabilidade, load-balacing, caches
compartilhados, etc.
Pasqua Tecnologia - http://douglaspasqua.com 14
6. Code on Demand
● Permite executar lógica no cliente, estendendo
e customizando o código do servidor
– Java applets
– Java script
– Etc.
● Restrição Opcional
Pasqua Tecnologia - http://douglaspasqua.com 15
Termo RESTful
● Termo RESTFul é usado para referenciar web
services que implementam a arquitetura REST
● Caso o serviço violar qualquer restrição não
pode ser considerado RESTful
Pasqua Tecnologia - http://douglaspasqua.com 16
Pontos Fortes
● Simplicidade
● Formatos de representação (JSON, XML, TXT,
etc.)
● JSON é enxuto, ideal para o mundo mobile
● Escalabilidade
● Cache
Pasqua Tecnologia - http://douglaspasqua.com 17
Usando Métodos HTTP para Serviços
RESTFul
Pasqua Tecnologia - http://douglaspasqua.com 18
Verbos HTTP Operação CRUD
GET Ler
POST Criar
PUT Substituir
PATCH Modificar
DELETE Excluir
Operações CRUD com HTTP
Pasqua Tecnologia - http://douglaspasqua.com 19
GET
● Deve ser usado somente para leitura (read).
● Idempotente
● Operação considerada “segura"
Pasqua Tecnologia - http://douglaspasqua.com 20
GET
➔ Itens Específicos
➔ GET http://api.example.net/singer/{id}
➔ GET http://api.example.net/singer/michaeljackson
➔ Coleções
➔ GET http://api.exampl.net/singers
Pasqua Tecnologia - http://douglaspasqua.com 21
GET - Representações
{
"name":"Michael Jackson",
"birthday":"1958-08-29",
"site":"michaeljackson.com",
"genres":[
"pop",
"rock",
"dance-pop"
]
}
<?xml version="1.0" encoding="UTF-8"?>
<singer>
<birthday>1958-08-29</birthday>
<genres>
<element>pop</element>
<element>rock</element>
<element>dance-pop</element>
</genres>
<name>Michael Jackson</name>
<site>michaeljackson.com</site>
</singer>
Pasqua Tecnologia - http://douglaspasqua.com 22
GET - Status Code
• 200 (OK)
• 404 (Not Found)
Pasqua Tecnologia - http://douglaspasqua.com 23
POST
● Usado para criação de novos recursos
● Deve retornar header “Location” com o link
para o novo recurso
● Não é uma operação “segura”
● Não é idempotente
Pasqua Tecnologia - http://douglaspasqua.com 24
POST - Exemplo
● POST http://api.example.net/singer
{
"name":"Michael Jackson",
"birthday":"1958-08-29",
"site":"michaeljackson.com",
"genres":[
"pop",
"rock",
"dance-pop"
]
}
Pasqua Tecnologia - http://douglaspasqua.com 25
POST - Exemplo (subordinado)
● POST http://api.example.net/singer/michaeljackson/music
{
"name":"Billie Jean",
"album":"Thriller",
"lancamento":"1982",
"letra":"Billie Jean is not my lover...",
"indicacoes":"Grammy Award, Cancao do Ano, etc."
}
Pasqua Tecnologia - http://douglaspasqua.com 26
POST - Status Code
● 201 Created (retornar Location)
● 400 Bad Request / 406 Not Acceptable
● 409 Conflict (registro duplicado)
Pasqua Tecnologia - http://douglaspasqua.com 27
PUT
● Recomendado para realização de atualizações
(updates)
● Permite-se usar PUT para criação de novos
recursos quando informado o ID pelo cliente
● Não é uma operação “segura”
● É idempotente
Pasqua Tecnologia - http://douglaspasqua.com 28
PUT - UPDATE
● PUT http://api.example.net/singer/michaeljackson
{
"name":"Michael Jackson",
"birthday":"1958-08-28",
"site":"michaeljackson.com",
"genres":[
"pop",
"rock",
"dance-pop"
]
}
Deve-se informar uma
nova representação do
recurso
Pasqua Tecnologia - http://douglaspasqua.com 29
PUT – Novo Recurso
● PUT http://api.example.net/singer/elvispresley
{
"name":"Elvis Presley",
"birthday":"1935-01-08",
"site":"www.elvis.com",
"genres":[
"pop",
"rock",
"blues"
]
}
Pode-se usar para
criar novos recursos
quando cliente informa
o ID
Pasqua Tecnologia - http://douglaspasqua.com 30
PUT – Status Code
● 200 OK / 204 No Content
● 404 Not Found
● 400 Bad Request / 406 Not Acceptable
Pasqua Tecnologia - http://douglaspasqua.com 31
PATCH
● Usado para modificação
● Contém apenas as mudanças e não a
representação completa do recurso
● Não é uma operação “segura”
● Não é idempotente
Pasqua Tecnologia - http://douglaspasqua.com 32
PATCH – Exemplo 1
● PATCH http://api.example.net/singer/michaeljackson
{
"birthday":"1958-08-29"
}
idempotente
Pasqua Tecnologia - http://douglaspasqua.com 33
PATCH – Exemplo 2
● PATCH http://api.example.net/singer/michaeljackson
{
"change":"birthday",
"from":"1958-08-28",
"from":"1958-08-29"
}
idempotente
Pasqua Tecnologia - http://douglaspasqua.com 34
PATCH – Exemplo 3
● PATCH http://api.example.net/singer/michaeljackson
{
"add":"genres",
"value":"blues"
}
idempotente
Pasqua Tecnologia - http://douglaspasqua.com 35
PATCH – Status Code
● 200 OK / 204 No Content
● 404 Not Found
● 400 Bad Request / 406 Not Acceptable
Pasqua Tecnologia - http://douglaspasqua.com 36
DELETE
● Usado para deletar um recurso
● Não é uma operação “segura”
● É idempotente
Pasqua Tecnologia - http://douglaspasqua.com 37
DELETE - Exemplos
● DELETE http://api.example.net/singer/michaeljackson
● DELETE http://api.example.net/singer/elvispresley
Pasqua Tecnologia - http://douglaspasqua.com 38
DELETE – Status Code
● 204 No Content
● 404 Not Found
Pasqua Tecnologia - http://douglaspasqua.com 39
Richardson Maturity Model
Pasqua Tecnologia - http://douglaspasqua.com 40
Richardson Maturity Model
● É uma maneira de graduar sua API de acordo
com as restrições do REST
● Quanto mais sua API aderir as restrições mais
pontuação ganha
● Desenvolvido por Leonard Richardson e
apresentando pela primeira vez na Qcon 2008
Pasqua Tecnologia - http://douglaspasqua.com 41
Pasqua Tecnologia - http://douglaspasqua.com 42
Protegendo APIs REST
Pasqua Tecnologia - http://douglaspasqua.com 43
Segurança em APIs REST
● A solução não deve manter estado no lado do
servidor (Restrição Stateless)
● Não utilizar Sessions
Pasqua Tecnologia - http://douglaspasqua.com 44
Segurança em APIs REST
● Abordagens mais usadas
– Basic
– Digest
– OAuth
– JWT (Json Web Token)
Pasqua Tecnologia - http://douglaspasqua.com 45
Pontos a Considerar
● Cache
● Versionamento
● Limitar taxa de acesso
● Tratamento de erros
● Documentação
● Ferramentas de Apoio / Frameworks
Pasqua Tecnologia - http://douglaspasqua.com 46
Cache
● Ideal quando o servidor tiver que lidar com
grande volume de dados
● Usar em Operações GET
● Servidor deve usar Etag(hash) ou Last-
Modified para indicar que cache é possível
● O Cliente deve gerenciar os dados no cache
localmente
Pasqua Tecnologia - http://douglaspasqua.com 47
Pasqua Tecnologia - http://douglaspasqua.com 48
Pasqua Tecnologia - http://douglaspasqua.com 49
Versionamento
● Via URL
GET http://api.example.net/v2/singer/michaeljackson
● Custom Request Header
GET http://api.example.net/singer/michaeljackson
Api-version: 2
Pasqua Tecnologia - http://douglaspasqua.com 50
Versionamento
● Content type
GET http://api.example.net/singer/michaeljackson
Accept: application/vnd.api.example+json;version=2
Pasqua Tecnologia - http://douglaspasqua.com 51
Limitar taxa de acesso
● Quantidade de requisições X Tempo
● Limite de acordo com perfil do usuário
– Usuários não logados vs Usuários logados
– Apps pagos
– Perfis de acesso
● Gerenciar carga do servidor
Pasqua Tecnologia - http://douglaspasqua.com 52
Tratamento de Erros
● Regra -> responda sempre no formato que o
cliente esteja esperando. (Retornar HTML enquanto
estiver esperando JSON ???)
● Mensagens de erro significativas
– Permissão negada ?
– Dados de entrada faltantes/inválidos
– Função inexistente
– Enviar sugestões para o usuário em caso de erro
Pasqua Tecnologia - http://douglaspasqua.com 53
Documentação
● Boa API => Boa Documentação
● Use Ferramentas para automatizar o processo
– swagger (https://swagger.io)
Pasqua Tecnologia - http://douglaspasqua.com 54
Ferramentas de Apoio / Frameworks
● Apigility (https://apigility,org) - PHP
● swagger (https://swagger.io)
● Jersey (https://jersey,github.io) – Java
● Amazon API Gateway
● sensedia API Platform (https://sensedia.com)
Pasqua Tecnologia - http://douglaspasqua.com 55
Referências
● http://restcookbook.com/
● http://martinfowler.com/articles/richardsonMatur
ityModel.html
● http://www.douglaspasqua.com/category/rest/
https://www.ics.uci.edu/~fielding/pubs/dissertat
ion/rest_arch_style.htm
● http://www.restapitutorial.com/httpstatuscodes.h
tml

Web Services RESTful

  • 1.
    Web Services RESTful Introduçãoe Conceitos Por Douglas V. Pasqua http://douglaspasqua.com
  • 2.
    Pasqua Tecnologia -http://douglaspasqua.com 2 Palestrante ● Douglas Pasqua – Desenvolvedor PHP / Java – Especialista Linux – Desde 2002 – LPIC-1, LPIC-2, PHP ZCE, Java SCJP – Instrutor e Palestrante – http://douglaspasqua.com
  • 3.
    Pasqua Tecnologia -http://douglaspasqua.com 3 O que é REST ? ● REpresentational State Transfer (Transferência de Estado Representacional) ● É um estilo arquitetural para criação de aplicações distribuídas ● Termo criado por Roy Fielding no ano de 2000 em uma tese de Doutorado - “Architectural Styles and the Design of Network-based Software Architectures” ● É totalmente independente do HTTP e da Web ● Sua utilização mais comum são APIs usando HTTP
  • 4.
    Pasqua Tecnologia -http://douglaspasqua.com 4 Restrições do REST 1)Client-server 2)Stateless 3)Cache 4)Uniforme Interface 5)Layered System 6)Code-On-Demand (opcional)
  • 5.
    Pasqua Tecnologia -http://douglaspasqua.com 5 1. Client-Server ● Objetivo é separar as duas arquiteturas ● Desenvolvimento dos dois são independentes ● Cliente não se preocupa com DB, log, cache, etc. ● Servidor não se preocupa com UX, etc.
  • 6.
    Pasqua Tecnologia -http://douglaspasqua.com 6 2.Stateless ● Requisições devem ser independentes ● O servidor não deve guardar estado do cliente ● O estado deve ser gerenciado no lado do cliente (sessions) ● Facilita design da arquitetura ● Facilita escalabilidade ● Facilita monitoração/depuração
  • 7.
    Pasqua Tecnologia -http://douglaspasqua.com 7 3.Cache ● Informar ao cliente se os dados de uma requisição podem ou não ser guardados em cache ● Melhorar: ● Escalabilidade ● Performance
  • 8.
    Pasqua Tecnologia -http://douglaspasqua.com 8 4.Uniforme Interface ● Define interface entre o cliente e servidor ● Simplifica e desacopla a arquitetura ● Permitindo as duas partes evoluir independentemente 1) Baseado em Recursos 2) Representação do Recurso 3)Mensagens auto descritivas 4)Hypermedia
  • 9.
    Pasqua Tecnologia -http://douglaspasqua.com 9 4.1. Baseado em Recursos ● Recursos individuais devem ser identificados em requisições usando URIs específicas e coesas. http://api.example.net/cantor/michaeljackson http://api.example.net/album/thisisit
  • 10.
    Pasqua Tecnologia -http://douglaspasqua.com 10 4.2. Representação ● Define a foram como o recurso deve ser retornado para o cliente ● JSON ● XML ● TXT ● HTML ● ...
  • 11.
    Pasqua Tecnologia -http://douglaspasqua.com 11 4.3. Mensagens Auto descritivas ● Cada representação deve conter a informação de como ela deve ser processada. ● Mime-types ● application/json ● application/xml ● text/plain
  • 12.
    Pasqua Tecnologia -http://douglaspasqua.com 12 4.4. Hypermedia ● A representação deve fornecer “links” (body ou headers) que permitem obter o próprio recurso ou relacionados.
  • 13.
    Pasqua Tecnologia -http://douglaspasqua.com 13 5. Layered System ● Sugere que o cliente não deve conectar diretamente ao servidor, mas sim em um intermediador. ● Facilita escalabilidade, load-balacing, caches compartilhados, etc.
  • 14.
    Pasqua Tecnologia -http://douglaspasqua.com 14 6. Code on Demand ● Permite executar lógica no cliente, estendendo e customizando o código do servidor – Java applets – Java script – Etc. ● Restrição Opcional
  • 15.
    Pasqua Tecnologia -http://douglaspasqua.com 15 Termo RESTful ● Termo RESTFul é usado para referenciar web services que implementam a arquitetura REST ● Caso o serviço violar qualquer restrição não pode ser considerado RESTful
  • 16.
    Pasqua Tecnologia -http://douglaspasqua.com 16 Pontos Fortes ● Simplicidade ● Formatos de representação (JSON, XML, TXT, etc.) ● JSON é enxuto, ideal para o mundo mobile ● Escalabilidade ● Cache
  • 17.
    Pasqua Tecnologia -http://douglaspasqua.com 17 Usando Métodos HTTP para Serviços RESTFul
  • 18.
    Pasqua Tecnologia -http://douglaspasqua.com 18 Verbos HTTP Operação CRUD GET Ler POST Criar PUT Substituir PATCH Modificar DELETE Excluir Operações CRUD com HTTP
  • 19.
    Pasqua Tecnologia -http://douglaspasqua.com 19 GET ● Deve ser usado somente para leitura (read). ● Idempotente ● Operação considerada “segura"
  • 20.
    Pasqua Tecnologia -http://douglaspasqua.com 20 GET ➔ Itens Específicos ➔ GET http://api.example.net/singer/{id} ➔ GET http://api.example.net/singer/michaeljackson ➔ Coleções ➔ GET http://api.exampl.net/singers
  • 21.
    Pasqua Tecnologia -http://douglaspasqua.com 21 GET - Representações { "name":"Michael Jackson", "birthday":"1958-08-29", "site":"michaeljackson.com", "genres":[ "pop", "rock", "dance-pop" ] } <?xml version="1.0" encoding="UTF-8"?> <singer> <birthday>1958-08-29</birthday> <genres> <element>pop</element> <element>rock</element> <element>dance-pop</element> </genres> <name>Michael Jackson</name> <site>michaeljackson.com</site> </singer>
  • 22.
    Pasqua Tecnologia -http://douglaspasqua.com 22 GET - Status Code • 200 (OK) • 404 (Not Found)
  • 23.
    Pasqua Tecnologia -http://douglaspasqua.com 23 POST ● Usado para criação de novos recursos ● Deve retornar header “Location” com o link para o novo recurso ● Não é uma operação “segura” ● Não é idempotente
  • 24.
    Pasqua Tecnologia -http://douglaspasqua.com 24 POST - Exemplo ● POST http://api.example.net/singer { "name":"Michael Jackson", "birthday":"1958-08-29", "site":"michaeljackson.com", "genres":[ "pop", "rock", "dance-pop" ] }
  • 25.
    Pasqua Tecnologia -http://douglaspasqua.com 25 POST - Exemplo (subordinado) ● POST http://api.example.net/singer/michaeljackson/music { "name":"Billie Jean", "album":"Thriller", "lancamento":"1982", "letra":"Billie Jean is not my lover...", "indicacoes":"Grammy Award, Cancao do Ano, etc." }
  • 26.
    Pasqua Tecnologia -http://douglaspasqua.com 26 POST - Status Code ● 201 Created (retornar Location) ● 400 Bad Request / 406 Not Acceptable ● 409 Conflict (registro duplicado)
  • 27.
    Pasqua Tecnologia -http://douglaspasqua.com 27 PUT ● Recomendado para realização de atualizações (updates) ● Permite-se usar PUT para criação de novos recursos quando informado o ID pelo cliente ● Não é uma operação “segura” ● É idempotente
  • 28.
    Pasqua Tecnologia -http://douglaspasqua.com 28 PUT - UPDATE ● PUT http://api.example.net/singer/michaeljackson { "name":"Michael Jackson", "birthday":"1958-08-28", "site":"michaeljackson.com", "genres":[ "pop", "rock", "dance-pop" ] } Deve-se informar uma nova representação do recurso
  • 29.
    Pasqua Tecnologia -http://douglaspasqua.com 29 PUT – Novo Recurso ● PUT http://api.example.net/singer/elvispresley { "name":"Elvis Presley", "birthday":"1935-01-08", "site":"www.elvis.com", "genres":[ "pop", "rock", "blues" ] } Pode-se usar para criar novos recursos quando cliente informa o ID
  • 30.
    Pasqua Tecnologia -http://douglaspasqua.com 30 PUT – Status Code ● 200 OK / 204 No Content ● 404 Not Found ● 400 Bad Request / 406 Not Acceptable
  • 31.
    Pasqua Tecnologia -http://douglaspasqua.com 31 PATCH ● Usado para modificação ● Contém apenas as mudanças e não a representação completa do recurso ● Não é uma operação “segura” ● Não é idempotente
  • 32.
    Pasqua Tecnologia -http://douglaspasqua.com 32 PATCH – Exemplo 1 ● PATCH http://api.example.net/singer/michaeljackson { "birthday":"1958-08-29" } idempotente
  • 33.
    Pasqua Tecnologia -http://douglaspasqua.com 33 PATCH – Exemplo 2 ● PATCH http://api.example.net/singer/michaeljackson { "change":"birthday", "from":"1958-08-28", "from":"1958-08-29" } idempotente
  • 34.
    Pasqua Tecnologia -http://douglaspasqua.com 34 PATCH – Exemplo 3 ● PATCH http://api.example.net/singer/michaeljackson { "add":"genres", "value":"blues" } idempotente
  • 35.
    Pasqua Tecnologia -http://douglaspasqua.com 35 PATCH – Status Code ● 200 OK / 204 No Content ● 404 Not Found ● 400 Bad Request / 406 Not Acceptable
  • 36.
    Pasqua Tecnologia -http://douglaspasqua.com 36 DELETE ● Usado para deletar um recurso ● Não é uma operação “segura” ● É idempotente
  • 37.
    Pasqua Tecnologia -http://douglaspasqua.com 37 DELETE - Exemplos ● DELETE http://api.example.net/singer/michaeljackson ● DELETE http://api.example.net/singer/elvispresley
  • 38.
    Pasqua Tecnologia -http://douglaspasqua.com 38 DELETE – Status Code ● 204 No Content ● 404 Not Found
  • 39.
    Pasqua Tecnologia -http://douglaspasqua.com 39 Richardson Maturity Model
  • 40.
    Pasqua Tecnologia -http://douglaspasqua.com 40 Richardson Maturity Model ● É uma maneira de graduar sua API de acordo com as restrições do REST ● Quanto mais sua API aderir as restrições mais pontuação ganha ● Desenvolvido por Leonard Richardson e apresentando pela primeira vez na Qcon 2008
  • 41.
    Pasqua Tecnologia -http://douglaspasqua.com 41
  • 42.
    Pasqua Tecnologia -http://douglaspasqua.com 42 Protegendo APIs REST
  • 43.
    Pasqua Tecnologia -http://douglaspasqua.com 43 Segurança em APIs REST ● A solução não deve manter estado no lado do servidor (Restrição Stateless) ● Não utilizar Sessions
  • 44.
    Pasqua Tecnologia -http://douglaspasqua.com 44 Segurança em APIs REST ● Abordagens mais usadas – Basic – Digest – OAuth – JWT (Json Web Token)
  • 45.
    Pasqua Tecnologia -http://douglaspasqua.com 45 Pontos a Considerar ● Cache ● Versionamento ● Limitar taxa de acesso ● Tratamento de erros ● Documentação ● Ferramentas de Apoio / Frameworks
  • 46.
    Pasqua Tecnologia -http://douglaspasqua.com 46 Cache ● Ideal quando o servidor tiver que lidar com grande volume de dados ● Usar em Operações GET ● Servidor deve usar Etag(hash) ou Last- Modified para indicar que cache é possível ● O Cliente deve gerenciar os dados no cache localmente
  • 47.
    Pasqua Tecnologia -http://douglaspasqua.com 47
  • 48.
    Pasqua Tecnologia -http://douglaspasqua.com 48
  • 49.
    Pasqua Tecnologia -http://douglaspasqua.com 49 Versionamento ● Via URL GET http://api.example.net/v2/singer/michaeljackson ● Custom Request Header GET http://api.example.net/singer/michaeljackson Api-version: 2
  • 50.
    Pasqua Tecnologia -http://douglaspasqua.com 50 Versionamento ● Content type GET http://api.example.net/singer/michaeljackson Accept: application/vnd.api.example+json;version=2
  • 51.
    Pasqua Tecnologia -http://douglaspasqua.com 51 Limitar taxa de acesso ● Quantidade de requisições X Tempo ● Limite de acordo com perfil do usuário – Usuários não logados vs Usuários logados – Apps pagos – Perfis de acesso ● Gerenciar carga do servidor
  • 52.
    Pasqua Tecnologia -http://douglaspasqua.com 52 Tratamento de Erros ● Regra -> responda sempre no formato que o cliente esteja esperando. (Retornar HTML enquanto estiver esperando JSON ???) ● Mensagens de erro significativas – Permissão negada ? – Dados de entrada faltantes/inválidos – Função inexistente – Enviar sugestões para o usuário em caso de erro
  • 53.
    Pasqua Tecnologia -http://douglaspasqua.com 53 Documentação ● Boa API => Boa Documentação ● Use Ferramentas para automatizar o processo – swagger (https://swagger.io)
  • 54.
    Pasqua Tecnologia -http://douglaspasqua.com 54 Ferramentas de Apoio / Frameworks ● Apigility (https://apigility,org) - PHP ● swagger (https://swagger.io) ● Jersey (https://jersey,github.io) – Java ● Amazon API Gateway ● sensedia API Platform (https://sensedia.com)
  • 55.
    Pasqua Tecnologia -http://douglaspasqua.com 55 Referências ● http://restcookbook.com/ ● http://martinfowler.com/articles/richardsonMatur ityModel.html ● http://www.douglaspasqua.com/category/rest/ https://www.ics.uci.edu/~fielding/pubs/dissertat ion/rest_arch_style.htm ● http://www.restapitutorial.com/httpstatuscodes.h tml