A API REST pode ser usada como camada de negócios?

9

Estou usando o padrão de design PHP Codeigniter MVC

e eu tive esse projeto com algum tipo de processo empresarial específico

No meu aplicativo, lidarei com 2 APIs REST existentes:

  1. Google
  2. Trello

Tive a ideia de criar a API REST para atuar como Business Logic Layer (BBL)

que, por sua vez, acessam meus modelos diretamente para buscar os dados necessários para formular regras de negócios

e controlador com comunicação com BLL com cliente REST, insira a descrição da imagem aqui

Essa abordagem é ruim para o desempenho?

É melhor criar 2 camadas de modelos, uma como DAL ( Data Access Layer ) e outra como Business Logic Layer (BLL)

Ahmed Samy
fonte
O REST é usado para as interações entre componentes. Não é uma camada arquitetônica! No entanto, poderia ser usado em uma arquitetura em camadas.
precisa
A semântica da pergunta está errada. Não pode ser usado como uma camada arquitetural, mas pode ser usado como uma interface para uma camada.
precisa

Respostas:

11

O problema que vejo com sua abordagem é que você está criando uma API REST para apenas um consumidor, seus controladores, e isso é um exagero. Não basta adicionar uma camada apenas para passar dados de uma camada para outra, não faz sentido, você estará criando trabalho para si mesmo sem nenhum benefício adicional.

Uma maneira (rápida) de tornar sua API útil seria se esse fosse o único ponto de extremidade que seus controladores (ou seja, seu aplicativo) precisam. Considere isto:

insira a descrição da imagem aqui

De repente, sua API REST tem um propósito, e é fornecer uma interface unificada para seus vários provedores de dados. Seu aplicativo não precisa saber sobre o Google ou a API do Trello, ou qualquer outro provedor de dados que você possa usar no futuro, apenas precisa saber sobre a API REST.

Esse design, embora um pouco mais útil, ainda será um exagero se o seu aplicativo for o único consumidor. O objetivo principal da criação de uma API REST é expor uma interface disponível publicamente para o compartilhamento de seus aplicativos. E a chave aqui é a exposição, sua API REST estará disponível para o mundo e, portanto, deve ser segura. A autenticação e autorização da API não são tarefas simples, se apenas um aplicativo usa sua API, por que enfrentar todos os problemas? A menos que você queira experimentar e aprender. Se for esse o caso, vá em frente.

De qualquer forma, o desempenho não deve ser um problema. Você adicionaria uma camada extra; portanto, obviamente haverá alguma sobrecarga, mas se essa sobrecarga será significativa ou não depende inteiramente da sua implementação. Se sua API REST for o ponto final único, provavelmente será uma boa ideia também ser o único local em que o cache ocorre. E não apenas o cache do lado do servidor, uma API REST torna o cache do navegador um pouco mais fácil de explorar e, se você acertar, o desempenho geral do seu aplicativo pode aumentar, em comparação com uma abordagem não REST.

tl; dr: Não crie coisas que não tenham um propósito real (a menos que você esteja aprendendo).

yannis
fonte
Obrigado @Yannis Rizos pela sua resposta Gostei da sua arquitetura e acho que estou gostando, mas uma pequena pergunta, o que você quis dizer com "Aplicativo" é um MVC inteiro ou apenas um VC (View and controlller), como acho que os controladores terão um monte de código de manipulação como validação, XHR, etc ... Eu não quero mais matá-lo com chamadas REST, mesmo se ele vai ser alguns deles e resto da BLL vai cuidar do resto
Ahmed Samy
e é bom conectar outra API REST da minha API REST?
Ahmed Samy
1
@AhmedSamy Sua API REST é essencialmente um aplicativo diferente, ele pode obter dados de qualquer lugar que desejar, incluindo seus modelos e outras APIs. Você precisará criar controladores RESTful para ele, e talvez até visualizações. Seu aplicativo principal pode chamar sua API REST por meio de seus controladores ou por suas visualizações (via Javascript).
yannis
1

Com base no seu desenho, parece que deveria haver um modelo chamado pelo seu controlador que lida com a conversa com o Google, obtendo os resultados de volta, formatando-o para o seu aplicativo e depois enviado ao controlador pronto para uso. Em outras palavras, todos os detalhes específicos do google estariam nesse modelo. o mesmo para o trello. Dessa forma, se você precisar adicionar mais APIs para consumir, manterá tudo agradável e separado.

este é um pequeno detalhe - mas lembre-se no design geral do aplicativo - você deve levar em consideração possíveis atrasos no envio / obtenção das informações do servidor da API para o servidor. em outras palavras, verifique se o aplicativo não desliga completamente se o servidor do trello estiver lento ou inativo.

As APIs precisam se preocupar com a segurança, mas não precisam necessariamente ser "públicas". muitas APIs são business to business sem nada público.

Eu li a maior parte deste livro - seu lançamento curto, ainda no início, e não há exemplos suficientes -, mas é muito atual, é todo php e o autor está criando e ensinando ativamente sobre APIs. http://shop.oreilly.com/product/0636920028291.do

o autor tem posts relacionados a php rest api em seu blog. http://www.lornajane.net/blog

e não se esqueça de ler os comentários para as postagens da API! seriamente, lhe dará uma perspectiva muito valiosa.

Sugira que você pesquise "hipermídia" e API no Google. talvez você não queira usá-lo, mas ele mostrará algumas outras técnicas para criação de API.

Acabei de ingressar em programadores - gostaria de fazer uma votação positiva se pudesse! a maioria das empresas não poderá criar aplicativos totalmente novos para consumir ou publicar APIs. portanto, apresentar as práticas recomendadas para integrar APIs em estruturas mvc existentes - isso é realmente importante.

cartalote
fonte