protocolo de requisição- resposta. • REST é um conjunto de princípios que definem como HTTP e URIs devem ser usados. HTTP: Hypertext Transfer Protocol REST: Representational State Transfer
objeto (ex: products). • Acessível através de um endpoint (ex: /products/8d2624365). • Suas operações são determinadas através dos verbos (ex: GET /products/). • Podem possuir relacionamentos. • Podem possuir diferentes representações (ex: JSON, YAML, XML).
nomear seus resources no plural: – /products /products, /persons /persons, , /customers /customers • Se preferir o singular, mantenha tudo no singular. • NUNCA misture os dois: – /product /product, /person /person, , /customers /customers
não não na na url url • Fuja de urls com verbos: – /getProducts /getProducts, / /createProducts createProducts • Use o verbo no protocolo HTTP: – GET GET /products /products, POST POST /products /products • Seja REST, não RPC. RPC: Remote Procedure Call
para a query string • Filtros, pesquisas e paginação devem ficar na query string: – /products?color=red&type=mobile /products?color=red&type=mobile • Não complique sua base de urls: – /products/redAndMobile /products/redAndMobile
quebre padrões para ações: – /machine/{id}/turnOn /machine/{id}/turnOn – /machine/{id}/turnOff /machine/{id}/turnOff • Use os verbos HTTP e deixe explícito que se trata de uma ação: – POST /machine/{id}/action/turn POST /machine/{id}/action/turn (turn on) – DELETE /machine/{id}/action/turn DELETE /machine/{id}/action/turn (turn off) • Se sua API tem muitas ações, talvez você deva usar RPC.
ao máximo ids sequenciais: – /persons/1 /persons/1 – /persons/2 /persons/2 • Use UUIDs sempre que possível: – /persons/59988232-29d0-11e5-848c- /persons/59988232-29d0-11e5-848c- 1078d2624365 1078d2624365 – /persons/ /persons/ ??? • Isso é uma questão de segurança.
as urls a até dois níveis: – /artists/{id}/albums/{id} /artists/{id}/albums/{id} • Se necessário, crie atalhos: – /artists/{id}/albums/{id}/tracks/{id}/... /artists/{id}/albums/{id}/tracks/{id}/... – /albums/{id} /albums/{id} – /tracks/{id} /tracks/{id}
de autenticação. • Use um protocolo já conhecido e testado pela comunidade. • De preferencia para o OAuth2, por sua vasta documentação e seus diversos casos de sucesso.
os status code HTTP. • Forneça uma descrição do erro para o desenvolvedor. • Forneça uma descrição do erro para o usuário final (caso seja necessário). • Forneça um link para a documentação onde trata do erro ocorrido.
para fazer cache de seus responses. • Os cabeçalhos ETag e If-None-Match podem ser úteis. • NUNCA guarde estado em suas APIs, use o redis ou o memcached para isso.
documentação. • Disponibilize exemplos de consumo da API (de preferência baseados no cURL). curl -X POST -H 'Content-Type: curl -X POST -H 'Content-Type: application/json' -d '{“foo”: “bar”}' application/json' -d '{“foo”: “bar”}' https://fun.com/api/foo https://fun.com/api/foo • Disponibilize um ambiente de sandbox.