Quando se trata de aplicativos grandes com um grande banco de dados contendo milhões de registros, você logo percebe que simples seleções, atualizações, inserções e exclusões simplesmente não são suficientes.
Então você começa a pensar de uma maneira diferente. Você cria procedimentos e gatilhos para cuidar de coisas mais complicadas diretamente no banco de dados e isso não é muito bom. Os bancos de dados oferecem excelente desempenho ao executar operações CRUD. Procedimentos longos? Não muito.
O problema com os procedimentos
Agora imagine que você alterna para um banco de dados que não suporta o conceito de procedimentos? O que você vai fazer? Você é forçado a mover os procedimentos para sua base de código, onde pode ter certeza de que, uma vez que o programa, digamos Java, ele sempre permanecerá lá, independentemente do mecanismo de banco de dados que você escolher.
Sem mencionar, seus procedimentos geralmente fazem parte da sua lógica de negócios e não é uma boa ideia ter sua lógica de negócios dividida em sua base de código e banco de dados.
Idealmente, você sempre deve ter um mediador entre o banco de dados e o cliente implementando suas próprias regras de negócios. Fornecer acesso direto ao banco de dados não é uma boa ideia, porque quando você faz isso, aquele com acesso tem acesso direto às tabelas e pode fazer praticamente qualquer coisa com os dados existentes.
Desvantagens
- Demora mais para se desenvolver: é claro que você está criando um novo sistema, que consumirá mais tempo do que simplesmente fornecer ao cliente uma cadeia de conexão com o banco de dados e permitir que ele escreva as consultas.
- Mais complexo: complexidade de um sistema> complexidade de uma consulta ao banco de dados.
- O servidor trabalha mais: não necessariamente. Com um bom design, armazenamento em cache, ... você pode mover a carga do servidor de banco de dados para o do mediador.
- Mais lento: Em termos de desenvolvimento? Sim. Em termos de velocidade ao recuperar dados? Não. Você pode otimizar seu mediador usando caches (como - popular em janeiro de 2016 - Redis, Elasticsearch) e realmente fazer com que ele entregue dados mais rapidamente do que uma consulta simples ao banco de dados.
Vantagens
- Migrar para outras plataformas é mais fácil: Migrar para um novo mecanismo de banco de dados? Definitivamente. Migrando todo o mediador para um novo idioma? Na verdade não.
- A lógica de negócios também é necessária ao chamar diretamente o banco de dados. Não demorará muito mais tempo para desenvolver: Como explicado anteriormente, o problema dos procedimentos.
- Segurança: Com a devida autorização, ter o mediador é definitivamente muito mais seguro do que conceder ao usuário acesso direto ao banco de dados, porque você o restringe aos pontos finais que executam apenas as consultas que você deseja.
- Manutenção: Um dos melhores benefícios de se ter um mediador. Se houver um bug em uma API que seus clientes chamam, você o corrige, envia a correção para o seu repositório VCS, constrói seu mediador a partir da versão atual do VCS que contém a correção e todos os seus clientes estão subitamente usando a correção, sem que eles precisem baixe uma atualização. Isso é simplesmente impossível, se as consultas forem armazenadas diretamente nos aplicativos clientes. Nesse caso, os clientes são forçados a atualizar seus aplicativos.
Security issues
como uma desvantagem para a API REST?