Boas Práticas para a Integração de API FedEx
Este guia de referência rápida destina-se a ajudar os consumidores da API a compreender as formas de melhorar a experiência de integração com a FedEx e garantir a qualidade da solução de integração em termos de design, velocidade e segurança.
Para integrar de forma eficiente com as API FedEx, os programadores devem seguir estas boas práticas para a integração:
URI de API
- Existem diferentes URI de API para testes e produção.
- Os programadores devem utilizar os URI de teste para testes de desenvolvimento e integração e os URI de produção para produção.
Os URI de API encontram-se indicados abaixo:
Teste: https://apis-sandbox.fedex.com/
Produção: https://apis.fedex.com/
Gestão de credenciais
Chave de API e Chave Secreta
- A Chave de API e a Chave Secreta são utilizadas para identificar a sua aplicação e têm de ser utilizadas num pedido de token OAuth.
- A Chave de API e a Chave Secreta devem ser utilizadas de forma muita segura. Não distribua a Chave de API ou a Chave Secreta por e-mail ou código distribuído, incluindo JavaScript do lado do cliente.
- A sua aplicação será comprometida se a Chave de API ou a Chave Secreta forem roubadas. Se suspeitar que as suas credenciais foram roubadas ou comprometidas, recrie de imediato a Chave Secreta.
- Evite registar informações confidenciais, como a Chave Secreta.
- Não codifique a Chave da API ou a Chave no seu código.
- A sua aplicação deve ser dinamicamente capaz de atualizar a Chave de API e a Chave Secreta.
- As credenciais do cliente devem ser armazenadas num cofre/local seguro para que não possam ser comprometidas.
Token OAuth
- O token de acesso deve ser armazenado apenas no servidor da aplicação web e não deve ser exposto ao browser.
- Não codifique o token nas suas aplicações.
- Proteja os tokens de acesso para evitar comprometê-los.
- Evite efetuar várias chamadas à API do token OAuth para um novo token de acesso. É recomendado colocar em cache o token de acesso até observar o código de erro HTTP 401. Volte a gerar o token OAuth nessa altura.
- Não exponha o token ao utilizador final ou à aplicação.
- Utilize HTTPS para qualquer transação da API.
Práticas de codificação
- Para manter a conformidade com o protocolo de comunicação de encriptação de dados mais recente e seguro, recomenda-se a utilização do protocolo Transport Layer Security (TLS), versão 1.2 ou superior.
- Não se esqueça de definir os cabeçalhos adequados da API necessários para cada pedido da API. Encontrará as informações referentes ao cabeçalho em cada página de documentação da API.
- O "Content-Type" em HTTP POST deve ser "application/json".
- Consulte o código de amostra para começar a utilizar cada API. Cada ponto final de API é acompanhado por várias amostras que irão ajudar a compreender os elementos e formatos necessários, bem como outros detalhes.
- Quando os utilizadores ou programadores enviam várias casas decimais nos seus valores, tal pode causar erros estranhos. Para o valor/montante de peso e moeda, apenas são permitidas duas casas decimais explícitas. As dimensões (como o comprimento, largura e altura) não suportam casas decimais.
- Evite enviar elementos em branco.
- Envie apenas os dados necessários para processar o pedido.
- Durante a programação, determine a reação caso um elemento de resposta não obrigatório, como uma tarifa, não seja devolvido. Avalie a resposta da transação para elementos em falta antes de utilizar os dados.
- De modo geral, evite dependências fortes da integração da API FedEx quando aplicável.
- De modo a reduzir a latência e obter resultados precisos, devem ser utilizadas as seguintes funcionalidades:
- Filtragem: utilize esta funcionalidade para limitar a pesquisa com os parâmetros que procura.
- Ordenação: utilize esta funcionalidade para ordenar os resultados por um determinado parâmetro em ordem ascendente ou descendente.
- Valide a presença de dados nos campos obrigatórios (como o código postal do destinatário e o peso do volume) antes de enviar a transação. Valide a conformidade dos dados para o campo em questão. Isto irá minimizar erros de transação.
- Para evitar um impacto negativo na disponibilidade e fiabilidade do sistema FedEx:
- Não execute testes de desempenho no ambiente de teste ou produção.
- Implemente a lógica da codificação para impedir que a transação falhe repetidamente.
- O limite foi definido para 1400 transações a cada 10 segundos. Se este limite for atingido nos primeiros segundos, o código de erro HTTP 429 Too many requests (Demasiados pedidos) será devolvido e as transações serão restringidas até o período de 10 segundos ser atingido. As transações serão então retomadas.
- Não codifique regras empresariais como tipos de serviço, tipos de volume, limites de peso, entre outras, para expedições, uma vez que estão sujeitas a alterações.
Por exemplo: peso: 45,26; valor/montante de moeda: 100,52; comprimento: 10; largura: 25; altura: 15.
Por exemplo: "Streetlines":""
Por exemplo, para uma expedição nacional nos EUA, evite enviar a fatura comercial e os dados da mercadoria que apenas seriam obrigatórios para expedições internacionais.
Por exemplo, é possível expedir um volume se as tarifas não estiverem funcionais. Teste a resposta da transação para elementos em falta antes de utilizar os dados.
Por exemplo, para códigos postais dos EUA, verifique se o campo é inteiramente numérico e se tem um formato de 5 dígitos ou o formato de código postal CP+4.
Por exemplo, se recebermos 1400 pedidos nos primeiros 4 segundos, será devolvido o código de erro HTTP 429 Too many requests - "We have received too many requests in a short duration. Please wait a while to try again." (Foram recebidos demasiados pedidos num curto período. Aguarde e tente novamente.) As transações serão restringidas durante os 6 segundos seguintes e, após esse período, novamente retomadas.
Processamento de erros
Cada resposta da API irá conter um código de estado HTTP e carga paga de resposta. Algumas respostas serão acompanhadas por um erro, aviso ou nota, conforme aplicável. Os aviso e notas não são indicações de uma falha, mas a mensagem de aviso ou erro deve ser registada e examinada. O processamento adequado de erros irá garantir que a integração com a FedEx decorre de forma eficaz e pode ajudar a evitar interrupções.
Códigos de estado HTTP
200 OK
Your request was processed successfully (O pedido foi processado com sucesso). Trata-se de uma resposta padrão para pedidos HTTP executados com sucesso.
- Nota: a resposta da API pode conter notas e avisos que fornecem conteúdos informativos. Certifique-se de que regista e analisa as mensagens.
400 Bad request
We received a bad request that we are unable to process (Pedido inválido – recebemos um pedido inválido que não é possível processar). Modifique o pedido e tente novamente.
- Nota: analise o código e a mensagem de erro para corrigir o pedido e tente novamente. Codifique apenas para códigos de erro e não mensagens de erro, uma vez que as mensagens estão sujeitas a alterações de forma dinâmica.
401 Unauthorized
We could not authenticate your credentials (Não autorizado – não foi possível autenticar as suas credenciais). Certifique-se de que verifica as suas chaves de API e tente novamente.
403 Forbidden
We could not authorize your credentials (Proibido – não foi possível autorizar as suas credenciais). Verifique as permissões e tente novamente.
404 Not found
The resource you requested is no longer available (Não encontrado – o recurso que pediu já não está disponível). Modifique o pedido e tente novamente.
405 Method not allowed
We received a requested method that is not supported (Método não permitido – recebemos um método de pedido que não é suportado). Apenas deve utilizar os métodos fornecidos para cada ponto final.
Por exemplo, para criar uma expedição, tem de utilizar o método POST conforme descrito na documentação da API.
409 Conflict
{provide reason of conflict} (Conflito). Modifique o pedido e tente novamente.
415 Unsupported media type
We do not support the content type in your request (Tipo de multimédia não suportado – não suportamos o tipo de conteúdo no seu pedido). Modifique o formato e tente novamente.
422 Unprocessable entity
We understood the format of your request, but we were unable to process the entity (Entidade não processável – o formato do pedido foi compreendido, mas não foi possível processar a entidade). Modifique o pedido e tente novamente.
429 Too many requests
We have received too many requests in a short duration (Demasiados pedidos – demasiados pedidos recebidos num curto período). Certifique-se de que revê as Quotas de transação e limites de tarifas.
500 Failure
We encountered an unexpected error and are working to resolve the issue (Falha – foi encontrado um erro inesperado e estamos a trabalhar para resolver o problema). Lamentamos qualquer inconveniência. Verifique mais tarde e esteja atento às comunicações da FedEx.
503 Service unavailable
The service is currently unavailable, and we are working to resolve the issue (Serviço indisponível – o serviço está atualmente indisponível e estamos a trabalhar para resolver o problema). Lamentamos qualquer inconveniência. Verifique mais tarde e esteja atento às comunicações da FedEx.
Tarifa
- Existem duas formas de obter uma cotação de tarifa:
- Tarifa para um serviceType específico: os resultados serão filtrados pelo valor de serviceType indicado. Isto irá diminuir o tamanho da resposta e reduzir o tempo de resposta da transação.
Por exemplo: STANDARD_OVERNIGHT
- Loja de tarifas: se não for indicado nenhum serviceType, todos os serviços aplicáveis e tarifas correspondentes serão devolvidas.
- Tarifa para um serviceType específico: os resultados serão filtrados pelo valor de serviceType indicado. Isto irá diminuir o tamanho da resposta e reduzir o tempo de resposta da transação.
- Utilize a API de Disponibilidade de Serviços para determinar os serviços, as opções de volumes e os serviços especiais que estão disponíveis para um determinado par origem-destino e passe o serviceType e a opção de volume no pedido de Tarifa.
Por exemplo, STANDARD_OVERNIGHT (entre outros) não está disponível entre todos os códigos postais.
- Para que um serviço especial seja aplicado numa expedição, o tipo de serviço especial e os respetivos detalhes têm de ser incluídos.
- Nota: alguns serviços especiais não têm detalhes.
- Consulte a Documentação da API de Tarifas.
Expedir
- Utilize a API de Disponibilidade de Serviços para determinar os serviços que estão disponíveis para um determinado par origem-destino e passe o serviceType e a opção de volume no pedido de Expedição.
- Para que um serviço especial seja aplicado numa expedição, o tipo de serviço especial e os respetivos detalhes têm de ser incluídos.
- Nota: alguns serviços especiais não têm detalhes.
- Realize o fecho do FedEx Ground no final do dia de expedições antes da recolha da expedição.
- Consulte a documentação da API de Expedição.
Rastrear
- Limite a quantidade de números de rastreio num único pedido de rastreio para 30. Isto irá diminuir o tamanho da resposta e reduzir o tempo de resposta da transação.
- Limite o número de vezes que um volume é rastreado de acordo com a frequência necessária para as necessidades de negócio.
- Para o rastreamento de lotes, remova os volumes que tenham devolvido o estado de rastreio "entregue" do lote.
- Consulte a Documentação da API de Rastreio.
Validação de Endereços
- A FedEx fornece a Validação de Endereços como sugestão e não determinação final. O utilizador final tem de determinar se é possível utilizar um endereço a partir dos dados fornecidos e das necessidades do negócio. Tem de ser implementado um processo para endereços que não podem ser validados, de forma a permitir o processamento das encomendas.
- Para garantir uma melhor experiência de expedição, não torne o processo de expedição dependente de serviços opcionais como a Validação de Endereços.
- Consulte a documentação da API da Validação de Endereços.
Por exemplo, se a API da Validação de Endereços estiver indisponível no momento da entrada ou expedição da encomenda, deve ser implementada uma contingência para concluir a expedição.
Pesquisa de Estações FedEx
- Limite a sua pesquisa ao fornecer atributos específicos (ou seja, tipo de localização, serviços oferecidos, etc.) para obter opções de localização adequadas e um tempo de resposta mais rápido.
- Consulte a Documentação da API de Pesquisa de Estações FedEx.
Pedido de Recolha
- Não defina uma hora a que está pronto no passado, uma data no passado ou uma data demasiado longínqua no futuro para agendar uma recolha.
- Não são permitidas recolhas anónimas.
- Consulte a Documentação da API do Pedido de Recolha.
Disponibilidade de Serviços
- Para obter resultados de várias empresas subsidiárias como a FedEx Express (FDXE), FedEx Ground (FDXG), FedEx Freight (FXFR) e FedEx Ground® Economy , omita o elemento carrierCodes ou envie pedidos de disponibilidade de serviços em separado, uma vez que os códigos de várias transportadoras não podem ser especificados.
- Certifique-se de que tem a pré-aprovação para paletes individuais de 68 kg ou mais e paletes que excedam 998 kg.
- Se especificar SATURDAY_DELIVERY para opções variáveis, obterá as opções de entrega ao Sábado e as opções habituais para todos os serviços nos quais a entrega ao Sábado é uma opção. Não especifique SATURDAY_DELIVERY para serviços especiais ou apenas serão devolvidas as opções de entrega ao Sábado aplicáveis.
- Consulte a Documentação da API de Disponibilidade de Serviços.
Apoio ao cliente
Se tiver alguma questão ou precisar de assistência, estamos aqui para ajudar! Aceda à nossa página de Apoio para obter recursos e informações sobre como entrar em contacto connosco.