Sobre Mim
Ravan Scafi
Back-end Developer na Leroy Merlin Brasil
Co-organizador do Meetup do Laravel SP
@ravanscafi
Slide 3
Slide 3 text
API?
O que é uma API?
Slide 4
Slide 4 text
Interface
é um elemento que proporciona uma ligação
física ou lógica entre dois sistemas ou partes
de um sistema que não poderiam ser conectados
diretamente.
Slide 5
Slide 5 text
(ou porque a gente tá aqui hoje)
API REST em 1 Minuto
Slide 6
Slide 6 text
API REST em 1 minuto
Cada recurso tem seu próprio URI
GET http://meusite.dev/api/users/rscafi
Slide 7
Slide 7 text
API REST em 1 minuto
Verbos HTTP indicam a ação
GET http://meusite.dev/api/users/rscafi
Slide 8
Slide 8 text
API REST em 1 minuto
Diferenciação por IDs
GET http://meusite.dev/api/users/rscafi
Slide 9
Slide 9 text
Motivação
Por que fazer uma API?
E o que isto implica?
Slide 10
Slide 10 text
Documentação
Como e por que documentar uma API?
Slide 11
Slide 11 text
“
apiary.io
“Uma API é apenas tão boa
quanto sua documentação”
Slide 12
Slide 12 text
No content
Slide 13
Slide 13 text
Swagger /
Open API Initiative
Uma forma de documentar sua API
Slide 14
Slide 14 text
Swagger /
Open API Initiative
Único arquivo swagger.json (ou .yml)
Slide 15
Slide 15 text
Swagger /
Open API Initiative
Consumível por humanos e máquinas
Slide 16
Slide 16 text
{
"swagger": "2.0",
"info": {
"description": "This is a sample server Petstore server.
You can find out more about Swagger at
[http://swagger.io](http://swagger.io) (...)",
"version": "1.0.0",
"title": "Swagger Petstore",
"termsOfService": "http://swagger.io/terms/",
"contact": {
"email": "[email protected]"
},
Slide 17
Slide 17 text
"paths": {
"/pet": {
"post": {
"tags": [
"pet"
],
"summary": "Add a new pet to the store",
"description": "",
"operationId": "addPet",
"consumes": [
"application/json",
"application/xml"
Documentação
Se possível, faça Documentation-First
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
/**
* @SWG\Info(title="My First API", version="0.1")
*/
/**
* @SWG\Get(
* path="/api/resource.json",
* @SWG\Response(response="200", description="An example
resource")
* )
*/
Slide 25
Slide 25 text
Empatia
é a chave
Slide 26
Slide 26 text
Empatia
é a capacidade de se identificar com outra
pessoa, de sentir o que ela sente, de querer o
que ela quer, de apreender do modo como ela
apreende etc.
Slide 27
Slide 27 text
Design
O que me atentar ao fazer uma API?
Slide 28
Slide 28 text
Versionamento
Somente exponha a “versão cheia”
(v1, v2)
Slide 29
Slide 29 text
Versionamento
Evite ao máximo Breaking Changes
Slide 30
Slide 30 text
NÃO
● Adicionar campos
● Adicionar recursos
● Adicionar endpoints
● Corrigir bugs *
O que causa uma Breaking Change?
SIM
● Remover campos
● Renomear campos
● Remover recursos
● Remover endpoints
Slide 31
Slide 31 text
Proteja-se com Mutators
Representam Recursos da API
Slide 32
Slide 32 text
Proteja-se com Mutators
Criam uma barreira entre seus Models
e sua API
Slide 33
Slide 33 text
Auxiliam em Typecasting
e Relacionamentos
Proteja-se com Mutators
{
"errorCode": 451942,
"errors": [
"Username must contain only
letters and numbers",
"E-mail is required"
]
}
Mostre a descrição do erro, não somente um código
{
"error": 451942
}
Slide 52
Slide 52 text
{
"errorCode": 500,
"errors": [
"Unknown error occurred.
Check you input or try again
later."
]
}
Nunca exponha Exceções para o Usuário
{
"exception":
“NullPointerException”
}
Slide 53
Slide 53 text
Autorização e
Autenticação
Como identificar meus usuários e suas permissões?
Slide 54
Slide 54 text
Autorização e
Autenticação
Qual a diferença?
Slide 55
Slide 55 text
Autorização
Baseada em Sessão: NÃO
Slide 56
Slide 56 text
Autorização
APIs devem ser sem estados
(stateless)
Slide 57
Slide 57 text
Autorização
Implementação em Mobile
pode ser custosa
Slide 58
Slide 58 text
Autorização
Baseada em Tokens: SIM
Slide 59
Slide 59 text
Segurança
Como proteger minha API?
Slide 60
Slide 60 text
Segurança
Evite expor IDs sequenciais
(use HashIDs por exemplo)
Slide 61
Slide 61 text
Segurança
Limite requisições, de forma configurável
(throttling)
Slide 62
Slide 62 text
Segurança
Não utilize logins por senha
(exceto em apps próprios)
Slide 63
Slide 63 text
Segurança
API somente em HTTPS
Slide 64
Slide 64 text
Dicas e Recursos
Onde ir a seguir?
Slide 65
Slide 65 text
OAuth 2.0
Fluxos de Autorização
Slide 66
Slide 66 text
JWT
Tokens de Autenticação
Slide 67
Slide 67 text
GraphQL
Negociação de Conteúdo e Documentação!
(substitui o REST)
Slide 68
Slide 68 text
● Build APIs You Won’t Hate
● HTTP API Design Guide
● Open API Initiative
● Petstore (Swagger UI)
● 2 Legged OAuth
● API Evangelist
Leituras
Slide 69
Slide 69 text
● Slack APIs You Won’t Hate
● ngrok
● Apigee
● Postman
● Paw
Dicas
Agradecimentos
Agradecimentos especiais a todos do SlidesCarnival que
fizeram e disponibilizaram o template da apresentação
gratuitamente.
Ao PHPSP pelo convite e organização do evento <3