Upload
rodolfo-fadino-junior
View
283
Download
0
Embed Size (px)
Citation preview
Design e boas práticas de APIs com C#@rodolfofadino
2010Central do assinante
ASP.NET MVCjQuery
Angular
{APIS}
{pagamento} {programa}
{tokenissuer}
{social}
230.000.000 req/mês
{prediction}
arquitetura infra
Consistência
Do:
Use GETs para retornar dados.
Use PUTs/POSTs para alterar dados.
Use a mesma estrutura de endpoints em toda api.
Escolha alguns status code para utilizar e manter a consistência em toda api.
Don’t:
Use status code de uma maneira não esperada. Se você irá retornar uma lista de posts, não retorne um 404 caso não exista nenhum post, retorne uma lista vazia.
Use GETs para alterar dados ou PUTs/POSTs para somente retornar dados.
Mensagens de erro para descrever condições.
Consistência
Endpoints: Recursos / VERBOS
GET /posts
GET /posts/123
POST /posts
versusGET /getAllPosts
GET /getPostById
POST /createPost
VERBOS HTTP
GET /posts - Lista de posts
GET /posts/12 - Post especifico
POST /posts - Cria um novo post
PUT /posts/12 - Atualiza o post #12
PATCH /posts/12 - Atualiza parcialmente o post #12
DELETE /posts/12 - Remove o post #12
Ações diferentes de um CRUD
Curtir um post
PUT /posts/:id/like
DELETE /posts/:id/like
Favoritar um post
PUT /posts/:id/star
DELETE /posts/:id/start
Status Code
https://http.cat/
Status Code
200 OK - Resposta de sucesso de um GET, PUT, PATCH ou DELETE. Pode ser utilizado para um POST que não crie uma entidade.
201 Created - Resposta para um POST que cria uma entidade. Pode ser combinado com um header location
204 No Content - Resposta de uma request que teve sucesso, que não possua retorno (DELETE request)
304 Not Modified - HTTP caching headers
400 Bad Request - Request mal formada
401 Unauthorized - Autenticação inválida.
403 Forbidden - Quando a autenticação funciona, mas o usuário não tem acesso ao recurso.
404 Not Found - Quando aquele recurso não existe
405 Method Not Allowed - Quando um verbo HTTP está sendo utilizado por um usuário que não tem a permissão (DELETE por exemplo)
429 Too Many Requests - Rate limite
Versionamento
api_v{version}.dominio.com.br/subscription/users
api_v{version}.dominio.com.br/social/posts
api.dominio.com.br/v{version}/subscription/users
api.dominio.com.br/v{version}/social/users
api.dominio.com.br/subscription/v{version}/users
api.dominio.com.br/social/v{version}/posts
api.dominio.com.br/subscription/users/v{version}/
api.dominio.com.br/social/posts/v{version}/
Versionamento
SSL Sempre
Documentação
Ferramentas
Postman
Fiddler
GZIP
IIS
NGINX
OU =>
DTOs
Validação
Controllers simples
Async/Await
Links
• https://rodolfofadino.com.br
• https://letsencrypt.org/
• http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api
• https://hackernoon.com/restful-api-designing-guidelines-the-best-practices-60e1d954e7c9
• http://asp.net/
• https://www.draw.io
Obrigado!
Rodolfo Fadino [email protected]