Melhores Práticas API REST

Description

Baseado no apigee
Edvaldo Ribeiro
Mind Map by Edvaldo Ribeiro, updated more than 1 year ago
Edvaldo Ribeiro
Created by Edvaldo Ribeiro over 10 years ago
90
0

Resource summary

Melhores Práticas API REST
  1. Substantivos são bons e verbos são ruins
    1. Use somente os substantivos nas urls e deixe a ação para os tipos (verbos Http) de envio (POST, GET, PUT, etc). Ex: GET /users/34 retorna o usuário 34, PUT /users/34 atualiza o usuário 34
      1. GET – solicitar recursos;
        1. POST – criar recursos;
          1. PUT – atualizar um recurso por completo;
            1. PATCH – atualizar parte de um recurso;
              1. DELETE – excluir um recurso
                1. OPTIONS – utilizado por apps front-end para saber quais métodos estão disponíveis na nossa API
                2. Utilizar os substantivos no plural e mais intuitivo
                  1. Utilize 2 url's base por recurso. Ex /users e /users/2
                  2. Nomes concretos são melhores do que nomes abstratos
                    1. Por exemplo, chamar por /itens trará dados de videos, textos e imagens, então item abstrai todo o conteúdo de retorno
                      1. O nível de abstração depende do cenário
                      2. Simplifique as associações
                        1. Por exemplo: GET /departments/35/users trás os usuários do departamento 35, POST /departments/35/users insere um novo usuário no departamento 35
                          1. Não há necessidade de se ter uma url muito extensa quando há muitos relacionamentos, pois será passado a chave primária do penúltimo pai, então o ideal e seguir o seguinte exemplo: POST /departments/35/users
                          2. Mantenha intuitiva a api jogando a complexidade de parâmetros e associação entre recursos para query string da url
                            1. Exemplo: Pegar todos os cachorros vermelhos correndo no parque -> GET /dogs?color=red&state=running&location=park
                            2. Versione sempre sua API
                              1. Utilize o identificador de versão e o número da mesma. Ex: v1, v2
                                1. Sempre passe a versão da API que está utilizando ao consumi-la, para evitar erros de compatibilidade quando a mesma for atualizada
                                  1. Exemplos de versionamento
                                    1. Facebook: ?v=1.0
                                      1. Twilio: /2010-04-01/Accounts/
                                        1. Salesforce.com: /services/data/v20.0/sobjects/Account
                                      2. Paginação e respostas parciais
                                        1. Exemplos de respostas parciais:
                                          1. Linkedin: /people:(id,first-name,last-name,industry)
                                            1. Facebook: /joe.smith/friends?fields=id,name,picture
                                              1. Google: ?fields=title,media:group(media:thumbnail)
                                              2. Exemplos de Offset e Limit
                                                1. Facebook - offset 50 and limit 25
                                                  1. Twitter - page 3 and rpp 25 (records per page)
                                                    1. LinkedIn - start 50 and count 25
                                                  2. Respostas que não envolve recursos
                                                    1. Respostas sem recursos são requisições que não interagem com banco de dados, apenas chama algum método que retorna a execução de algum algorítmo
                                                      1. Utilize verbos ao invés de substantivos
                                                        1. Ex: converter 100 reais para dolar - /convert?from=REAL&to=DOLAR&amount=100
                                                        2. Suporte a vários formatos
                                                          1. Exemplos de definição de respostas
                                                            1. Google Data: ?alt=json
                                                              1. Foursquare: /venue.json
                                                                1. Digg: Accept: application/json ?type=json
                                                                2. É importante possibilitar a API trabalhar com vários formatos: JSON, XML, ETC
                                                                3. Nomes de atributos de request/response
                                                                  1. Exemplos
                                                                    1. Twitter - "created_at": "Thu Nov 03 05:19;38 +0000 2011"
                                                                      1. Bing - "DateTime": "2011-10-29T09:35:00Z"
                                                                        1. Foursquare - "createdAt": 1320296464
                                                                        2. Recomendações
                                                                          1. Utilize o padrão da linguagem Javascript para json
                                                                            1. CamelCase para atributos
                                                                              1. Utilize maiúsculo e minúsculo dependendo do tipo de objeto
                                                                            2. Truques para buscas
                                                                              1. Exemplos
                                                                                1. Busca Global: /search?q=fluffy+fur
                                                                                  1. Busca com escopo: /owners/5678/dogs?q=fluffy+fur
                                                                                    1. Busca com resultados formatados: /search.xml?q=fluffy+fur
                                                                                  2. Trabalhanbdo com erros
                                                                                    1. Consolidar requisições de API em um subdomínio
                                                                                      1. Exemplos
                                                                                        1. Facebook possui duas apis: graph.facebook.com api.facebook.com
                                                                                          1. Foursquare possui uma API: api.foursquare.com
                                                                                            1. Twitter possui 3 API'S: stream.twitter.com api.twitter.com search.twitter.com
                                                                                            2. Utilizado para separar mais de uma api ou para simplificar a url
                                                                                            3. Dicas para trabalhar com comportamento de exceções
                                                                                              1. Utilize uma opção no parâmetro para suprir o status de retorno do cabeçalho, caso o desenvolvedor queira, para que retorne sempre 200 (Padrão utilizado pelo twitter). Ex: /public_timelines.json? suppress_response_codes=true
                                                                                                1. Permita igonar o status de retorno, retornando sempre 200 (OK)
                                                                                                  1. Quando o cliente suportar métodos Http limitados utilize o tipo de método opicional como parâmetro
                                                                                                    1. Ex: Create /dogs?method=post
                                                                                                      1. Read /dogs
                                                                                                        1. Update /dogs/1234?method=put&location=park
                                                                                                          1. Delete /dogs/1234?method=delete
                                                                                                        2. Princípios REST
                                                                                                          1. Para uma API ser REST ela deve ser statless, ou seja, é totalmente alheia ao estado de aplicação, cada requisição é isolada e deve ser passada todas informações necessárias para obter um retorno
                                                                                                            1. API não utiliza sessão
                                                                                                              1. API não utiliza cookies
                                                                                                                1. Para armazenar informações e estado da API no cliente, usa-se web storage, local storage ou session storage
                                                                                                                  1. Session storage: mesmo estado da API em mais páginas de uma aplicação
                                                                                                                    1. Local Storage: Para manter informação a longo prazo, ex: de um dia para o outro
                                                                                                                  2. Autenticação
                                                                                                                    1. (VER MAPA MENTAL "Mellhores praticas REST API - Autenticação")
                                                                                                                    Show full summary Hide full summary

                                                                                                                    Similar

                                                                                                                    Core Spring 4.2 Certification Mock Exam
                                                                                                                    antoine.rey
                                                                                                                    RESTful Web Services with Express Framework and mongoose.
                                                                                                                    Angel Martínez Rodriguez
                                                                                                                    ASSIGNMENT SHEET 2-1-3: BASIC THEORY REVIEW
                                                                                                                    Justin Vaughan
                                                                                                                    /service/rest/login/reset/:account
                                                                                                                    Nikolaos Grammatikos
                                                                                                                    Acronyms
                                                                                                                    Shantal K Green
                                                                                                                    HW Image API
                                                                                                                    danh1964
                                                                                                                    testing
                                                                                                                    Milka Milkonska
                                                                                                                    FHIR
                                                                                                                    R A
                                                                                                                    .NET Web API
                                                                                                                    Pritesh Patel
                                                                                                                    Core Spring 4.2 Certification Mock Exam
                                                                                                                    luis enrique perez galindo