Melhor método de comunicação entre seu aplicativo e seu site? PHP, serviço Web, etc

8

Estou criando um aplicativo que gostaria de comunicar com meu site. O aplicativo precisará obter dados de um usuário em particular do banco de dados do site. Não estou claro quanto à melhor maneira de fazer isso.

Eu vi uma maneira de fazer isso, por exemplo, é criar uma página de login no aplicativo que, em seguida, acessa uma lógica login.php no meu site. Isso é conveniente porque eu posso usar uma base de código para lidar com o login no site e no aplicativo.

Outra solução que eu já vi é usar solicitações JSON para lidar com a comunicação entre o aplicativo e o site. Isso é conveniente porque os objetos JSON são fáceis de criar e analisar.

Eu basicamente gostaria de saber a melhor maneira / comum de fazer essa comunicação ocorrer, quais são os prós e os contras de ter um sobre o outro e quaisquer outros problemas de segurança a serem considerados.

Por exemplo, existe o risco de expor dados confidenciais do usuário ao usar um método sobre o outro? Em caso afirmativo, como isso pode ser evitado? Como e onde as validações de criptografia e usuário entram em jogo aqui?

edc598
fonte
A maneira comum é criar uma API. Veja os exemplos de APIs do Google ou de qualquer outra empresa grande para ter uma idéia de como elas são feitas.
Arseni Mourzenko
Não existe um método único 'melhor', 'tamanho único'. Em vez de nos dizer as opções que você viu, defina melhor para nós as necessidades específicas do seu aplicativo. Eu suspeito que, quando você se concentrar, você encontrará sua decisão muito mais fácil de tomar.
GrandmasterB
No nível mais básico, preciso de um meio para o aplicativo móvel obter informações do banco de dados do meu site. O usuário terá vários bits de dados, como diferentes tipos de transações, por exemplo. Quero poder mostrar ao meu usuário no aplicativo toda a transação que ele fez no mês passado. Eu preciso fazer uma consulta no meu banco de dados para isso. Já estou me inclinando mais para o PHP, pois posso manter uma base de código para essa funcionalidade básica. Mas existe um método melhor e mais seguro de fazer isso? Existem armadilhas / perigos óbvios que estou ignorando?
Edc598
2
@ edc598: Por favor, não adicione comentários à sua pergunta. Para esclarecer uma pergunta, é melhor atualizá- la para ser completa e consistente.
31512 S.Lott

Respostas:

6

Eu recomendaria a criação de uma API REST para seu aplicativo e seu site.

Construir um serviço da Web é mais trabalhoso, mas acho que é muito mais limpo. Se você fizer isso dessa maneira, nem seu site nem seu aplicativo precisarão se preocupar com a conexão e a consulta no banco de dados, pois todos esses detalhes serão abstraídos pela API. Além disso, outro benefício é a segurança: se o seu site for invadido, ele não terá necessariamente acesso ao seu banco de dados, pois ele está fazendo apenas chamadas à API (e não chamadas ao banco de dados). É claro que há muitas coisas a considerar segurança, mas é uma coisa a menos com a qual você precisa se preocupar.

Aqui está um ótimo guia para iniciantes sobre como criar uma API REST no PHP:

http://www.gen-x-design.com/archives/create-a-rest-api-with-php/

ChezMix
fonte
Gostei mais desta resposta, pois incluía um link útil. Embora a resposta de todos tenha fornecido uma grande quantidade de informações sobre o assunto. Obrigado!
21412 Edc598
link is dead ...
cozyconemotel 31/03
1

Dependendo da complexidade de seus requisitos, serviços da web REST / JSON ou SOAP.

Para requisitos simples, o REST é mais simples de entender e implementar, especialmente se você preferir JSON sobre XML.

No entanto, se seus requisitos incluírem autenticação, verificação de mensagens, descoberta, não repúdio ou esquema complexo de mensagens, é melhor você mergulhar nas complexidades do SOAP, pois quase todos os problemas são abordados. Embora o SOAP seja mais complexo e difícil de entender, ele lida com quase todas as permutações e variações arquiteturais possíveis em um sistema de mensagens, além disso, ele possui um conjunto muito maduro e abrangente de ferramentas para ajudá-lo no labirinto de APIs. Mas se você não precisar desse nível de sofisticação, fique com o REST.

James Anderson
fonte
0

A maior desvantagem de uma API é que você está colocando a responsabilidade de fazer solicitações JSON, converter as respostas e exibi-las na página, sob responsabilidade do navegador. Nem todos os navegadores podem fazer isso, intrinsecamente ou porque os usuários desativaram o java-script.

No entanto, essas preocupações diminuíram com o tempo e agora afetam relativamente poucos clientes. No entanto, pode valer a pena fazer um trabalho extra para oferecer suporte a todos os clientes.

As vantagens de uma API são que é muito mais fácil separar a lógica da API dos detalhes da exibição e acessar mais facilmente a API por outros meios que não um navegador (como de outro aplicativo). Isso torna automaticamente o teste da API separado do teste do cliente, o que é bom.

Também é um pouco mais seguro contra ataques de injeção de página (como ataques de script entre sites) porque é mais fácil analisar e escapar adequadamente o JSON do que para um documento HTML (que pode incluir tags de script que contêm java-script). Isso pressupõe que no cliente você analise JSON com um analisador JSON e não use apenas alguma forma de eval (), que não é de todo segura.

Outra vantagem possível é que você pode praticamente eliminar a camada "estrutura da web". Em vez de ASP, JSP, Django, Zend ou qualquer outra coisa, você realmente precisa de uma camada fina para retransmitir o JSON do cliente para o servidor. Portanto, no mínimo, você pode portar essa parte entre estruturas de uma maneira trivialmente fácil, se quiser. Isso pode eliminar uma grande parte móvel do seu aplicativo.

Acho que a criptografia e a validação funcionam basicamente da mesma maneira. Acho que se você tem uma API, é mais provável que lembre-se de não confiar no cliente do que se tiver uma página da Web, pois é possível esquecer que os invasores não precisam usar um navegador como cliente, mas podem enviar cabeçalhos , parâmetros de consulta e postar dados que eles desejam. Este é mais um problema psicológico do que técnico e pode não se aplicar a você.

psr
fonte
1
Obrigado pela sua resposta, muito bem pensada. Estou procurando apenas apoiar meu próprio aplicativo tho. Eu pensei que talvez criar métodos diferentes no PHP que executam consultas diferentes para dados do usuário seja uma boa idéia. O que você acha dessa idéia? Como posso proteger a comunicação entre meus scripts PHP e meu aplicativo? Posso usar https? Existe alguma coisa que eu estou negligenciando? Um método mais fácil de consultar esses dados, talvez?
22612 Edc598
Tudo o que eu disse, exceto uma coisa, se aplica apenas ao suporte ao seu próprio aplicativo. HTTPS é uma questão separada, mas ajudará a proteger a comunicação, mas não impedirá a execução de scripts ou ataques entre sites do próprio cliente. Eu realmente não sei quais são as duas últimas perguntas aqui.
Psr