3081 words
15 minutes
The world of APIs and HTTP
Protocolo HTTP
Introducao
- Protocolo de aplicacao que serve para transferir informacoes entre cliente e servidor, chamado de HTTP ou Hyper Text Transfer Protocol;
- No modelo de camadas, o protocolo HTTP eh atribuido a camada 7 (aplicacao), e usa o protocolo TCP para estabelecer suas comunicacoes;
- Funciona sem criptografia e envia todas as informacoes em texto nao criptografado (seu irmao, “HTTPS”, faz o contrario e junta o poder do HTTP e do TLS/SSL) e eh stateless;
- URI (Uniform Resource Identifier) permite que o protocolo identifique qual recurso deve ser acessado (uma URL - Uniform Resource Locator - eh um exemplo de como ele faz isso);
- A construcao de um URL da-se pelo conjunto dos seguintes elementos:
- Scheme: instrui sobre qual protocolo usar para acessar o recurso, como HTTP, HTTPS, FTP;
- User: alguns servicos exigem autenticacao para efetuar login, voce pode inserir um nome de usuário e uma senha na URL para efetuar login;
- Host / Domain: o nome de dominio ou endereco IP do servidor que voce deseja acessar;
- Port: a porta a qual você se conectara;
- Path: o nome do arquivo ou local do recurso que você está tentando acessar;
- Query String: bits extras de informacao que podem ser enviados para o caminho solicitado (ex:
/blog?id=1); - Fragment: referencia a um local na pagina solicitada. Isso é comumente usado para páginas com conteudo longo e pode ter uma determinada parte da pagina diretamente vinculada a ela, para que fique visivel ao usuario assim que ele acessa a pagina (ex:
#task1).
- A construcao de um URL da-se pelo conjunto dos seguintes elementos:
- Recebe um pedido (request) e responde-o (response);
- Sua estrutura eh a seguinte:
- Request:
- Metodo / Verbo;
- Recurso;
- Versao do Protocolo + Headers + Body.
- Response:
- Versao do Protocolo;
- Status da Resposta;
- Mensagem de Status + Headers + Body.
- Podemos ter alguns tipos de headers, sao eles:
- Gerais: aparecem tanto em requests quanto em responses, e nao estao relacionados ao conteudo da mensagem;
- ex:
Cache-Control.
- ex:
- De Requisicao: contem mais informacoes sobre a requisicao, seu cliente ou sobre o recurso solicitado;
- ex:
User-Agent,Accept.
- ex:
- De Resposta: fornecem informacoes adicionais sobre a resposta, como o seu local ou o seu servidor;
- ex:
Server,Set-Cookie; - Eh ideal ter cautela com esses headers, pois eles podem apresentar risco a seguranca;
- Quando for usar o
Set-Cookie, sempre se atente em utilizar as flagsSecure(serao enviados apenas sobre HTTPS) eHttpOnly(para nao serem acessadas pelo javascript).
- ex:
- De Entidade: contem informacoes sobre o corpo da entidade, como seu tamanho ou seu tipo;
- ex:
Content-Type,Content-Length; - Os tipos de
Content-typemais comuns sao:- URL Encoded (
application/x-www-form-urlencoded); - Form Data (
multipart/form-data); - JSON (
application/json); - XML (
application/xml).
- URL Encoded (
- ex:
- De Seguranca: ajudam a melhorar a seguranca geral do app web, fornecendo mitigacoes contra ataques;
- Content-Security-Policy (CSP):
- Camada de segurança adicional que pode ajudar a mitigar contra ataques comuns, controlando o que pode ser executado dentro da pagina;
- Fornece um caminho para administradores dizerem quais dominios ou recursos sao considerados seguros e prove uma camada de mitigacao para alguns ataques;
- ex:
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.tryhackme.com; style-src 'self'default-src: especifica a política padrão de si, o que significa apenas o site atual;script-src: especificam a política de onde os scripts podem ser carregados;style-src: especifica a política para as folhas de estilo CSS podem ser carregadas.
- Strict-Transport-Security (HSTS):
- Garante que o web browser sempre se conectara via HTTPS;
- ex:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload;max-age: define o tempo de expiracao para essa configuracao;includeSubDomains: configuracao opcional que instrui o browser para aplicar essa regra tambem nos subdominios;preload: configuração opcional que permite que o site seja incluído nas listas de preload. Os navegadores podem usar listas de preload para aplicar os HSTS antes mesmo de fazer sua primeira visita a um site.
- X-Content-Type-Options:
- Pode ser usado para instruir os navegadores a não adivinhar o tipo MIME de um recurso, mas apenas usar o declarado no
Content-Type; - ex:
X-Content-Type-Options: nosniff;nosniff: essa diretiva instrui o browser para nao sniffar o tipo MIME.
- Pode ser usado para instruir os navegadores a não adivinhar o tipo MIME de um recurso, mas apenas usar o declarado no
- Referrer-Policy:
- Controla a quantidade de informacoes compartilhadas sobre a pagina de origem (referenciador) enviadas ao servidor da Web de destino quando um usuario eh redirecionado do servidor de origem, bem como quando clica em um hiperlink;
- Resumidamente, controla a privacidade e seguranca dos dados da URL de origem enviados em requisicoes subsequentes;
- ex:
Referrer-Policy: no-referrer: desabilita completamente qualquer informacao enviada sobre o referenciador;Referrer-Policy: origin: envia apenas o dominio;Referrer-Policy: same-origin: enviara apenas informacoes do referenciador quando o destino fizer parte da mesma origem (mesmo dominio);Referrer-Policy: strict-origin: envia apenas o referenciador como origem quando o protocolo permanece o mesmo (HTTPS para HTTPS);Referrer-Policy: strict-origin-when-cross-origin: envia a URL completa em navegações internas seguras, domínio apenas em externas, nada se for HTTPS para HTTP.
- Content-Security-Policy (CSP):
- Gerais: aparecem tanto em requests quanto em responses, e nao estao relacionados ao conteudo da mensagem;
- Request:
/** Request */POST /uri HTTP/1.1
// @HeadersHost: example.comUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)Accept: application/json // "O que eu quero receber"Content-Type: application/json // "Como eu esto enviando"Content-Length: 50// EMPTY LINE: separa o header do body!// @Body{ "name": "John Doe", "email": "john.doe@example.com"}
/** Response */HTTP/1.1 201 Created // Eh chamado de `status line`
// @HeadersDate: Sat, 27 Jul 2024 12:28:53 GMTContent-Type: application/jsonContent-Length: 92Location: /api/users/1
// @Body{ "id": 1, "name": "John Doe", "email": "john.doe@example.com", "createdAt": "2024-07-27T12:28:53Z"}CORS (Cross-Origin Resource Sharing)
- Mecanismo de seguranca (aplicado no servidor e no browser) que controla o acesso entre diferentes origens na web, controlando assim quem pode acessar o recurso;
- Por exemplo, quando um site hospedado em
siteA.comtenta fazer uma requisição a uma API emapiB.com; - Tem como finalidade impedir que páginas de outros domínios acessem recursos sem autorização, protegendo o usuário contra ataques como Cross-Site Request Forgery (CSRF);
- Funciona assim:
- O navegador envia uma requisição especial (preflight) perguntando ao servidor se a origem tem permissão;
- O servidor responde com cabeçalhos HTTP específicos, como:
Access-Control-Allow-Origin: https://siteA.com;Access-Control-Allow-Methods: GET, POST;Access-Control-Allow-Headers: Content-Type.
- Se o navegador receber autorização, ele permite a requisição; caso contrário, bloqueia.
Metodos / Verbos HTTP
- Verbos / Metodos sao maneiras semanticas de dizer o que queremos fazer com a requisicao (no fundo todas funcionam da mesma maneira);
- Sao eles:
GET: solicitar conteudo;HEAD: semelhante ao get, porem apenas os cabecalhos sao retornados;POST: utilizado quando eh necessario enviar algo a ser processado;PUT/PATCH/MERGE: utilizado para indicar alteracao de conteudo;- Put seria para alteracoes em massa (e caso ainda nao exista alguma das alteracoes, ele gera);
- Patch para pequenas alteracoes.
DELETE: utilizado para indicar remocao de conteudo;- Nao aceita body portanto se precisar de dados dinamicos use queryStrings;
- Para bulk delete use arrays na query.
OPTION: utilizado para saber quais operacoes de um determinado recurso estao disponiveis;CONNECT: estabelece um tunelamento TCP / IP com o servidor, geralmente para facilicar a comunicacao SSL;TRACE: envia um teste de loopback motrando o caminho que uma requisicao faz para chegar ate o recurso especificado no servidor destinado.
Respostas (Responses) HTTP
- Existem 5 categorias, que estao localizadas nos ranges
1~5, onde de1~3sao informativos e de4~5sao erros.
1XX (Solicitacoes de Informacao)
- Nao representam erros e apenas indicam que a solicitacao foi recebida pelo servidor e esta pronta para dar sequencia ao processo;
- Algumas respostas:
100: continue;- indica que tudo ocorreu bem.
2XX (Operacao Bem Sucedida)
- Algumas respostas:
200: ok;- GET: recurso obtido e retornado no corpo da mensagem;
- PUT / POST: recurso resultante da acao eh retornado no corpo da mensage.
201: created;- Nao deve ser usado sempre que algo for criado, mas quando atender a consideracao: “a requisicao foi feita com a intencao de criar algo?”;
- Recurso criado e retornado no corpo da resposta.
202: accepted;- Indica que a solicitacao foi recebida mas ainda nao foi atendida e nao ha uma forma de enviar posteriormente uma resposta assincrona indicando o resultado da solicitacao (tratamento assincrono).
204: no-content;- Indica que nao ha conteudo para enviar para esta solicitacao, mas os cabecalhos podem ser uteis e sao o suficiante.
3XX (Redirecionamento de Conteudo)
- Algumas respostas:
301: moved permanently;- A url do recurso requerido mudou.
4XX (Erros Cliente-Side)
400: bad request;- Indica que o servidor nao pode ou nao ira processar a solicitacao devido a um problema com a sintaxe da request;
- Esta relacionado a estrutura dos dados.
401: unauthorized;- Semanticamente significa “unauthenticated”, e o cliente deve autenticar-se ou renovar seu token para obter a resposta.
403: forbidden;- Mesmo que autenticado, nao possui o nivel de acesso necessario, e sao erros de permissao.
404: not found;- Indica que o recurso solicitado nao esta disposto a divulgar que existe ou nao pode ser solicitado.
422: unprocessable content;- A solicitacao esta bem formatada, com a sintaxe correta e foi entendida, mas nao pode ser atendida devido a problemas com os dados fornecidos pelo cliente;
- Exemplos:
- Usuario tenta fazer o cadastro, mas tenta usar um e-mail que ja esta cadastrado;
- Campo obrigatorio e eh esperado que tenha entre 4 a 255 caracteres e:
- Usuario nao enviou o campo;
- Usuario enviou 2 caracteres;
- Usuario enviou 256 caracteres.
5XX (Erros Server-Side)
500: internal server error;- Condicao inesperada e resposta automatica do servidor.
502: bad gateway;- Enquanto atuando como servidor intermediario (gateway ou proxy), recebeu uma resposta invalida do servidor para o qual a request foi encaminhada.
503: service unavaiable;- Indica que o servidor nao esta pronto para lidar com a request, podendo ser por conta de sobrecarregamento ou manutencao;
- O cabecalho
HTTP Retry-Afterdeve sempre que possivel estar presente contendo o tempo estimado para restabelecimento do servico.
504: gateway timeout;- Indica que o servidor atuando como gateway ou proxy nao conseguiu responder em tempo.

APIs
Definicao
- Significado:
- Interface de Programacao de Aplicacoes;
- Application Programming Interface.
- Sao mecanismos que permitem que dois componentes de software se comuniquem usando um conjunto de definicoes e protocolos;
- Tambem pode ser vista como um contrato de servico entre duas aplicacoes.
Funcionamento
- Funcionam com base nas comunicacoes cliente e servidor;
- Existem quatro maneiras diferentes pelas quais as APIs podem funcionar, dependendo de quando e por que elas foram criadas. Sao elas:
SOAP:- Usam o Simple Object Access Protocol;
- O cliente e servidor trocam mensagens usando XML;
- Esse design eh menos flexivel e era mais popular no passado.
RPC:- Conhecidas como Remote Procedure Calls;
- O cliente conclui uma funcao / procedimento no servidor e o servidor envia a saida de volta ao cliente.
WebSocket:- Usa objetos JSON para transmitir dados;
- Oferece suporte a comunicacao bidirecional entre aplicativos cliente-servidor;
- O servidor pode enviar mensagens de retorno de chamada a clientes conectados, tornando-o mais eficiante que o design REST.
REST:- Sao as mais populares e flexiveis atualmente;
- O cliente envia solicitacoes ao servidor como dados e o servidor usa essa entrada do cliente para iniciar funcoes internas e retornar os dados de saida ao cliente.
Autenticacao
Basic Authentication
- Nome de usuario e senha dividido por
:e codificados em base64; - Exemplo:
Authorization: Basic YWRtaW46YWRtaW4=.
API Keys
- Servidor gera uma chave de acesso unica para o cliente e, para utilizar a API, o cliente envia essa chave unica em toda requisicao;
- Serve para autenticacao e nao autorizacao;
- Exemplo:
Api-key: thi123456.
SAML (Security Assertion Markup Language)
- Troca de autenticacao baseada em XML entre um IdP (Identity Provider) e um SP (Service Provider);
- Exemplo:
- O SP redireciona para o IdP;
- IdP autentica o usuário;
- Retorna um SAML Assertion;
- SP valida e concede acesso.
OAuth
- Protocolo completo com diversas especificacoes de seguranca;
- Util no processo de autenticacao e autorizacao.
Fluxo de Funcionamento
- Resource Owner: entidade dona do recurso, que eh capaz de controlar o cesso a um recurso. Normalmente eh o proprio usuario;
- Resource Server: servidor que possui os recursos, e por sua vez, recebe as requisicoes;
- Authorization Server: servidor que gera tokens de acesso para permitir que o client acesse os recursos autorizados pelo resource owner;
- Client: aplicacao que acessa os recursos do resource server.

Ferramentas Auxiliares
- OpenID Connect: extensao da funcionalidade de autenticacao do OAuth;
- JWT: formato de token seguro que utiliza JSON como base.
O que sao APIs REST / Restful?
- Significado:
- Transferencia Representacional de Estado;
- Representational State Transfer.
- Define um conjunto de metodos / verbos, e usa o protocolo HTTP para estabelecer comunicacoes;
- Restful eh o termo atribuido a uma API que possui a inteligencia de aplicao para o padrao REST;
- Dando uma breve passada em autenticacao, o principal servico open-source utilizado atualmente eh o OAuth2.0 com JWT;
- Eh descrito em seis restricoes:
- Uniform Interface: definido por mais 4 restricoes;
- URI: identificador de recursos;
- Verbos HTTP: manipulacao de recursos atraves de representacoes;
- Mensagens Auto-descritivas: cada requisicao deve conter informacoes suficientes para o servidor processar a informacao;
- HATEOAS (Hypermedia as the Engine of Application State) (opcional): diz que a resposta do servidor deve conter links de conteudos relacionados ao resource, dessa forma o controle de fluxo da aplicacao eh controlado atraves do servidor e nao do frontend.;
- Resource Based:
- Resource eh qualquer coisa importante o suficiente para ser referenciada por um nome, nesse caso, resource eh qualquer coisa que possa ter uma URI.
- Stateless: servidores nao salvam dados dos clientes entre as solicitacoes;
- Cacheable: a resposta de uma solicitacao deve implicitamente ou explicitamente informar se o dado pode ser mantido em cache ou nao, e o mesmo deve ser mantido e gerenciado pelo lado do cliente;
- Client-Server: separa as responsabilidades do front / back end;
- Code on Demand (opcional): permite que as funcionalidades do cliente sejam extendidas baixando e executando applets ou scripts;
- Layered System: o sistema deve ter uma arquitetura de camadas.
- Uniform Interface: definido por mais 4 restricoes;
Construindo uma API Rest
| Método HTTP | Rota | Descrição | Corpo da Requisição | Corpo da Resposta |
|---|---|---|---|---|
| GET | /api/users | Retorna uma lista de todos os usuários | N/A | json [ { "id": 1, "name": "John Doe", "email": "john.doe@example.com" }, ... ] |
| GET | /api/users/{id} | Retorna um usuário específico | N/A | json { "id": 1, "name": "John Doe", "email": "john.doe@example.com" } |
| POST | /api/users | Cria um novo usuário | json { "name": "John Doe", "email": "john.doe@example.com" } | json { "id": 1, "name": "John Doe", "email": "john.doe@example.com", "createdAt": "2024-07-27T12:28:53Z" } |
| PUT | /api/users/{id} | Atualiza um usuário existente | json { "name": "John Doe Updated", "email": "john.doe@example.com" } | json { "id": 1, "name": "John Doe Updated", "email": "john.doe@example.com", "updatedAt": "2024-07-27T12:35:00Z" } |
| DELETE | /api/users/{id} | Deleta um usuário | N/A | json { "message": "User deleted successfully" } |
Boas Praticas para Construcao de APIs
- Utilize o mesmo padrao de URI na identificacao dos recursos;
- Deixe facil o processo de versionamento;
- Para nomear, utilize substantivos no plural, evite verbos (ja que URIs representam recursos e nao acoes) e use hifens junto de letras minusculas;
- Se atente ao contexto para usar o verbo HTTP correto;
- Evite adicionar na URI a operacao a ser realizada no recurso;
- Evite adicionar na URI o formato desejado da representacao do recurso;
- Suporte diferentes representacaos (HTML, XML, JSON, etc).
- Evite manter dados de autenticacao / autorizacao em sessao, para isso use:
- OAUTH, JWT, Keycloack, etc.
- Tente utilizar, no maximo, 3 niveis de acoes;
- Utilize acoes apenas apos definir uma URI para um resource, desde que a acao nao sobrescreva o sentido do verbo HTTP;
- Evite fazer com que o patch explique o da hierarquia anterior;
- ex:
POST /usuarios/criar;- Neste caso basta o verbo HTTP:
POST /usuarios.
- Neste caso basta o verbo HTTP:
- ex:
- Filtros sempre na queryString, e nunca deve ser colocado como parametro / parte da rota;
- Ordene endpoints por dependencia;
- ex:
/courses/1/topics/1/class;- Courses depende de topics que, por sua vez, depende de class.
- ex:
- Para formatacao de data e hora use o padrao ISO 8601 e UTC.
Versionamento
- Temos dois tipos de versionamento, sao eles:
- URL:
- Por Subdominio (ex:
http://api-v1.minhaapi.com/vinhos); - Por Path (ex:
http://minhaapi.com/v1/vinhos); - Por Querystring (ex:
http://minhaapi.com/vinhos?version=1.0).
- Por Subdominio (ex:
- Header:
- Via Accept (ex:
Accept: application/vnd.gastronomia.v2+json); - Via Header Customizado (ex:
api-version: 2);- Junto do Path eh a melhor combinacao;
- Podemos fornecer uma data, por exemplo, e a partir dela pegar a minor atualizada.
- Via Accept (ex:
- URL:
Throttling, Rate Limiting e Outros Limitadores
- Sao estrategias complementares, mas nao tem as mesmas funcoes.
Rate Limiting
- Protege sua API de um alto consumo de requisicoes;
- Configuracao do limite de requisicoes aceitas pela API em uma determinada janela de tempo, e que pode ser em segundos, horas, dias, etc (principalmente em minutos);
- Exemplo: 100 req/h.
Throttling
- Prepara sua API para cenarios de picos de acesso;
- Configuracao da fila de requisicoes excedidas para processamento em uma janela de tempo posterior, ou seja, eh o tempo de delay do processamento da requisicao apos o client exceder os parametros de rate limit;
- Exemplo: 2 re-tentativas com delay de 1 min.
API Quota
- Utilizado em cenarios comerciais com renovacao de consumo e modelos de cobranca (como uma conta de celular);
- Podem ser combinadas com rate limit;
- Exemplo: API Quota de cliente X eh 5 mil req/mes.
API Burst
- Disponibiliza temporariamente infraestrutura ociosa para ganhar mais performance de processamento para requisicoes e clientes especificos;
- Exemplo: se o rate limit de uma API X eh 10 req/min e um cliente envia 20 requisicoes de uma vez, o API Burst vai verificar se existe capacidade no servidor que nao esta sendo usada, e ira processar as 20 requisicoes em alta performance, nao afetando outros clientes nem o resto da sua API.
Exemplo Real (RL + TH)

Filtragem, Paginacao e Ordenacao de Consultas
Filtragem
- Permite restringir os resultados de uma API com base em criterios especificos.
-- GET /api/products?category=books&author=John
SELECT * FROM products WHERE category = 'books' AND author = 'John';Paginacao
- Divide os resultados em partes menores (pages), permitindo carregar apenas uma fracao dos dados, o que melhora o desempenho e reduz a carga da API;
-- Eq.: OFFSET = (current page - 1) * items per page
-- GET /api/products?per_page=10&page=1SELECT * FROM products LIMIT 10 OFFSET 0;
-- GET /api/products?per_page=10&page=2SELECT * FROM products LIMIT 10 OFFSET 10;
-- GET /api/products?per_page=10&page=3SELECT * FROM products LIMIT 10 OFFSET 20;
-- ...Subtipos
- Cursor: chave unica e sequencial que usa registro de dados para indicar.
GET /api/products?since_id=100&max_id=200
> Retorna todos os produtos de ID 100 ate 200.- Page e PageSize: parametros de numero da pagina e seu tamanho.
GET /api/products?page=3&page_size=10
> Retorna 10 produtos da pagina 3.- Offset e Limit (melhor em termos de performance): paginacao baseada em descolamento de registros.
GET /api/products?offset=10&limit=30
> Retorna 30 produtos a partir do decimo registro.Ordenacao
- Define a ordem de exibicao dos resultados.
-- GET /api/products?sort_by=author&order=desc
SELECT * FROM products ORDER BY author DESC;
-- GET /api/products?order=author:desc,price:asc,...
SELECT * FROM productsORDER BY author DESC, price ASC, -- ...Juntanto as Pecas
/*GET /api/products ?category=books &start_date=2025-01-01 &end_date=2025-01-28 &min_price=1000 &max_price=2000 &sort_by=author &order=desc &per_page=10 &page=1*/
SELECT *FROM productsWHERE category = 'books' AND created_at BETWEEN '2025-01-01' AND '2025-01-28' AND price BETWEEN 1000 AND 2000ORDER BY author DESCLIMIT 10 OFFSET 0;Cache
- Estrutura computacional de armazenamento focada em manter copias de dados que sao acessados com frequencia;
- Vantagens:
- Reducao da latencia de rede;
- Reducao de carga de processamento dos servidores;
- Otimizacao de tempo de resposta do client.
- Tipos:
- Shared Cache: armazena respostas de servidores para reutilizacao entre diversos usuarios;
- Private Cache: armazena respostas de servidores para reutilizacao de apenas um usuario.
Lado do Cliente
- Sao especificados no header da requisicao;
- Tipos:
Cache-Control: no-store:- Nao guarda nenhum cache;
- A cada requisicao, o cliente fara downlod da respota do server normalmente.
Cache-Control: no-cache:- O browser ira enviar uma requisicao ao servidor para validacao desses dados;
- Economiza banda, mas com a certeza que o cache esta atualizado.
Cache-Control: public:- Permite que os dados de reposta do servidor sejam armazenados em um cache compartilhado.
Cache-Control: private:- Permite que os dados de reposta do servidor sejam armazenados para utilizacao de apenas um usuario.
Cache-Control: max-age=30:- Limita o tempo maximo que o cache ficara disponivel (em segundos);
- Indica ao browser que ele pode armazenar cache, mas que deve validar novamente quando a duracao for excedida.
Cache-Control: must-revalidate:- Obriga que o browser sempre revalide os dados.
Lado do Servidor
- Load Balancing:
- Distribui a capacidade de processamento das requisicoes e trafego de rede;
- Sua API fica mais escalavel e segura, pois se um servidor falhar, voce tera outros funcionando.
- Proxy Reverso:
- Interface publica da sua API, ou seja, funciona como intermediador de todas as requisicoes externas;
- Vantagens:
- Seguranca: protecao contra DDoS e configuracoes de certificados SSL;
- Performance: funcionalidades nativas de compressao de dados trafegados e cache. Como eh um intermediador, consegue tratar os dados de forma inteligente antes de retornar ao client.
- API Gateway:
- Roteamento, monitoramento, autenticacao e autorizacao (“Proxy Reverso Plus”);
- Transformacao de dados, seguranca avancada por politicas, etc.
- CDN (Content Delivery Network - Rede de distribuicao de conteudo):
- Mantem replicas de conteudos web em servidores geograficamente localizados para redirecionar requisicoes a fim de diminuir a latencia;
- Principais players: Akamai e Cloudfront.
Compressao de Dados
- Reduz o tamanho da resposta para otimizar transferencia e desempenho;
- Aplicavel a JSON, HTML, CSS, JavaScript e outros dados, alem de arquivos;
- O cliente solicita compressão com
Accept-Encoding: gzip, compress; - O servidor, se suportar, responde com
Content-Encoding: gzip.
Tooling
- Saber mais sobre Status Codes:
https://http.cat/; - Linguagem de consulta para APIs:
https://graphql.org/; - Documentacao de APIs:
https://swagger.io/.
Referencias
https://medium.com/@jonatangall/um-breve-resumo-sobre-o-protocolo-http-1d32c333dd34https://www.hostgator.com.br/blog/o-que-e-protocolo-http/https://www.hostgator.com.br/guias/http-status-code-como-resolver/https://aws.amazon.com/pt/what-is/api/https://wssilva-willian.medium.com/design-de-api-rest-9807a5b16c9fhttps://www.brunobrito.net.br/padrao-rest/https://www.brunobrito.net.br/rest-nao-e-crud/https://www.alura.com.br/artigos/rest-principios-e-boas-praticas
The world of APIs and HTTP
https://dantsec.github.io/posts/crash-courses/apis-and-http/