Transforme o SOC com um SIEM de última geração
Transforme o SOC com um SIEM de última geração
REST (REpresentational State Transfer) é um estilo de arquitetura para a criação de APIs que se comunicam via protocolo HTTP.
Em segundo plano, as APIs frequentemente precisam manipular dados como parte de sua operação. Geralmente, essas operações de dados (abreviadas como CRUD) são executadas em bancos de dados de backend. A abreviação CRUD designa as quatro operações fundamentais Create, Read, Update e Delete (Criar, Ler, Atualizar e Excluir, em português).
Como as chamadas da API REST invocam operações CRUD, é importante que desenvolvedores de API e engenheiros de dados compreendam a relação entre esses elementos. Embora operações CRUD e REST tenham propósitos diferentes, uma não deve afetar negativamente o desempenho da outra.
Neste artigo, apresentaremos os elementos CRUD e REST, explicaremos suas semelhanças e diferenças e abordaremos como monitorar melhor o desempenho deles.
O que é CRUD?
As operações CRUD aplicam-se a sistemas tradicionais de gerenciamento de bancos de dados relacionais (como PostgreSQL ou SQL Server) e a bancos de dados NoSQL mais recentes (como MongoDB ou DynamoDB). Embora operações orientadas a arquivos também gerenciem a manipulação de informações, o termo CRUD geralmente se refere a operações orientadas por registros e executadas nos bancos de dados.
Em sistemas de gerenciamento de bancos de dados relacionais (RDBMS), uma linha de tabela de um banco de dados é chamada de registro, enquanto colunas são chamadas de atributos ou campos. Vamos conhecer as operações CRUD uma por uma.
Create (Criar)
Uma operação de criação adiciona um novo registro de banco de dados. O equivalente SQL dessa operação é INSERT.
Ler
Uma operação de leitura recupera registros (ou documentos ou itens, dependendo do tipo de banco de dados) de uma tabela de banco de dados (ou coleção) com base nos critérios de pesquisa. O equivalente SQL de uma operação de leitura é SELECT. As operações de leitura podem retornar um subconjunto de registros e campos, dependendo da consulta.
Update (Atualizar)
Uma operação de atualização, que também é UPDATE em SQL, modifica os registros existentes em um banco de dados. Uma operação de atualização, como leitura, pode afetar todos os registros e/ou campo ou um subconjunto deles.
Delete (Excluir)
Uma operação de exclusão, que também é DELETE em SQL, remove um ou mais registros do banco de dados.
Nos bancos de dados NoSQL, as expressões que correspondem às operações CRUD dependem da plataforma, das estruturas de dados e da linguagem. Por exemplo, no MongoDB:
- Uma operação de criação usa
db.collection.insertOne()oudb.collection.insertMany(). - Uma operação de leitura usa
db.collection.find()oudb.collection.findOne(). - Uma operação de atualização usa
db.collection.updateOne(),db.collection.updateMany(), oudb.collection.replaceOne(). - Uma operação de exclusão usa
db.collection.deleteOne()oudb.collection.deleteMany().
Geralmente, o código da aplicação da API executa operações CRUD invocando procedimentos armazenados, funções ou acionadores no RDBMS. Em alguns casos, o código da API também pode emitir comandos SQL gerados dinamicamente para o mecanismo de banco de dados.
Em bancos de dados NoSQL, o código da aplicação da API envia os comandos pelo driver de banco de dados. Por exemplo, uma aplicação Java pode chamar a biblioteca do driver HBase para enviar comandos CRUD ao banco de dados. Em segundo plano, o driver converterá os comandos de Java e os executará no banco de dados.
Exemplo real de CRUD
Vamos considerar um exemplo real de CRUD em ação. Quando um usuário reserva uma viagem por um aplicativo de serviços on-line de viagens, a aplicação cria um registro de reserva, lê as informações sobre hotéis e quartos disponíveis, atualiza a lista de quartos disponíveis quando uma reserva é confirmada ou exclui todo o registro da reserva, caso o usuário cancele a solicitação. Operações semelhantes acontecem em qualquer aplicação de processamento de transações.
O que é REST?
REST é um estilo de arquitetura de APIs, muito usado em aplicações distribuídas. APIs REST (ou RESTful) são aplicações que seguem os princípios da arquitetura REST e permitem que aplicações cliente e outras APIs interajam com elas por meio de endpoints de API. As aplicações que acessam APIs REST geralmente enviam solicitações usando métodos de protocolo HTTP. As seis principais restrições da arquitetura REST são:
- Interface uniforme: a interface uniforme permite que qualquer cliente API se comunique com o servidor de forma consistente e padronizada, independentemente da implementação ou da linguagem de programação do cliente ou do servidor.
- Cliente-servidor: o padrão de design cliente-servidor estipula funções separadas para o cliente e para o servidor da API. O servidor é responsável pela funcionalidade de backend, como armazenamento, validação e autenticação de dados. Enquanto isso, o cliente lida com interface do usuário, construção de consultas etc.
- Sem estado: para ser considerada sem estado, cada solicitação de cliente para a API deve conter todas as informações necessárias para que o servidor realize a tarefa. O servidor não salva nenhuma informação de estado da sessão, nem do cliente nem do servidor. No que se refere à API, cada solicitação de cliente é uma solicitação nova e separada da solicitação anterior.
- Armazenável em cache: a restrição armazenável em cache impõe que a resposta da API determine se o cliente tem permissão para armazenar em cache essa resposta. A API marca a resposta como armazenável em cache ou não armazenável em cache.
- Sistemas em camadas: as camadas referem-se à inclusão de componentes opcionais que oferecem funcionalidade. Exemplos: balanceamento de carga, validação etc. Essas camadas devem ser transparentes para o cliente. Os componentes de cada camada não devem conseguir ver nada além da camada na qual estão trabalhando.
- Código sob demanda (opcional): permite que os clientes baixem e executem código do servidor da API.
As APIs REST são predominantes nas aplicações modernas. Por exemplo, APIs de clima, serviços de streaming de vídeo, redes sociais ou aplicativos de carona solidária utilizam amplamente APIs REST.
Métodos HTTP
Os clientes encapsulam solicitações API RESTful usando métodos HTTP:
- GET: a solicitação GET pede que a API recupere um recurso, como um registro de banco de dados ou o conteúdo de um arquivo, e o envie para o cliente.
- POST: com o método POST, o cliente envia dados para o servidor da API, que cria um recurso com os dados fornecidos.
- PUT: quando o cliente envia uma solicitação PUT para a API, ele aponta para o URI de um recurso específico e fornece dados no corpo da solicitação. Quando o servidor da API recebe a solicitação PUT, ele verifica se o recurso já existe. Caso o recurso exista, a API o atualiza com os dados incluídos na solicitação PUT. Caso o recurso não exista, a API cria esse recurso com os dados fornecidos.
- PATCH: o cliente envia uma solicitação PATCH para a API para atualizar parcialmente um recurso existente.
- DELETE: o cliente envia uma solicitação DELETE a uma API para excluir um recurso existente.
Exemplo de solicitações de API REST
Várias ferramentas de cliente podem enviar solicitações para endpoints de API. Uma ferramenta de linha de comando comum é cURL. Confira abaixo alguns exemplos de como usar cURL para enviar solicitações HTTP para um endpoint de API REST fictício.
O endpoint da nossa API REST fictícia é http://www.foobar.com, e estamos enviando solicitações HTTP diferentes para essa API a fim de criar, ler, atualizar ou excluir registros do cliente.
No snippet de código a seguir, o cliente cURL solicita detalhes de um cliente com ID 19. Esta é uma solicitação GET.
curl -v http://www.foobar.com/find_customert_record?id=19
Em seguida, adicionamos um registro de cliente com uma solicitação POST. No exemplo de comando a seguir, encapsulamos os dados no corpo da solicitação HTTP.
curl -X POST -d 'id=10&customer_name=joe_bloggs' http://www.foobar.com/add_customer_record
Neste exemplo, apontamos para um arquivo que contém os dados da criação do registro.
curl -X POST -d @customer_record.json -H "Content-Type: application/json" http://www.foobar.com/add_customer_record
Para atualizar o registro do cliente, enviamos as seguintes solicitações PUT.
curl -d 'id=10&client_name=jane_bloggs' -X PUT http://www.foobar.com/update_customer_record
Por fim, removemos o cliente de ID 22:
curl -X DELETE http://www.foobar.com/delete_customer_record?id=22
CRUD x REST: semelhanças e diferenças
Como é possível perceber, apesar das diferenças, as operações de API RESTful podem ser muito semelhantes às operações CRUD do banco de dados:
No exemplo de aplicativo de serviços on-line de viagens mencionado acima, uma aplicação Web inicia as operações CRUD. O site de frontend fará chamadas da API REST, o código da API converterá essas solicitações em comandos CRUD do banco de dados as transmitirá para o driver do banco de dados. Assim que o driver do banco de dados retornar uma resposta (de êxito ou de falha), o código da API a converterá em uma resposta HTTP e a enviará ao cliente.
Tanto para REST quanto para CRUD, uma resposta é enviada à parte solicitante. Para clientes API REST, ela vem na forma de uma resposta HTTP padrão (por exemplo, 200 OK, 404 Resource Not Found, 500 Internal Server Error). Para CRUD, cada mecanismo de banco de dados será seus próprios códigos de resposta para êxito, falha ou avisos.
Agora, vamos falar das diferenças.
Já mencionamos como CRUD e REST funcionam em diferentes partes da stack de uma aplicação. As APIs REST aceitam payloads pelo protocolo HTTP, enquanto CRUD usa o protocolo que foi habilitado pelo banco de dados. Os pacotes de rede também têm diferentes estruturas. Geralmente, as APIs REST aceitam solicitações do cliente pela porta 80 ou 443, embora isso possa ser configurado. Para operações CRUD, a configuração do servidor de banco de dados estipula a porta. Por exemplo, a porta padrão do SQL Server é 1433.
As funções CRUD podem existir no código da API REST. No entanto, as APIs REST não se limitam a chamar apenas operações CRUD. As APIs REST podem chamar outras funções, sub-rotinas e até mesmo outras APIs.
Embora existam inúmeras APIs REST (públicas e privadas), atualmente só está disponível um número finito de mecanismos de banco de dados (incluindo RDBMS, NoSQL e bancos de dados em memória).
Descubra a plataforma nativa de IA líder global para SIEM e gerenciamento de log de última geração
Eleve sua cibersegurança com o CrowdStrike Falcon®, a principal plataforma nativa de IA para SIEM e gerenciamento de log. Experimente registro de log de segurança em uma escala de petabytes, optando por nativo em nuvem ou implementação auto-hospedada. Registre seus dados com uma arquitetura avançada e livre de índices, sem gargalos e que permite investigação de ameaças com mais de 1 PB de ingestão de dados por dia. Assegure capacidades de pesquisa em tempo real para superar os adversários, atingindo latência de menos de um segundo para consultas complexas. Aproveite uma visibilidade completa, consolidando os dados para quebrar silos e possibilitar que as equipes de segurança, TI e DevOps investiguem ameaças, monitorem o desempenho e garantam a conformidade perfeitamente em 3 bilhões de eventos e em menos de um segundo.