Como os Serviços Web RESTful e SOAP diferem na prática?

Estou implementando serviços da Web para um aplicativo PHP e estou tentando entender o que os serviços da Web padrão e os serviços da Web RESTful têm a oferecer. Minha intenção é escrever o código do invólucro para abstrair os detalhes do serviço da Web, para que os desenvolvedores possam apenas "instanciar objetos remotos" e usá-los. Aqui estão os meus pensamentos, talvez alguns de vocês possam adicionar sua experiência e expandir isso:

Serviços da Web RESTful

são basicamente apenas "feeds XML sob demanda", por exemplo, você pode escrever o código do wrapper para um aplicativo cliente para que ele possa consultar o aplicativo do servidor desta maneira:

$users = Users::getUsers("state = 'CO'");
isso, por sua vez, obteria um feed XML de um URL remoto$ users podem ser transformados em uma coleção de objetos de usuário completos oudeixado como XML outransformado em uma matriz, etc.o script de consulta ("state = 'CO'") seria traduzido para SQL no lado do servidor

Os Serviços Web RESTful, em geral, são somente leitura a partir da visualização do cliente, embora você possa escrever um código que possa usar POST ou GET para fazer alterações no servidor, por exemplo. passando um token criptografado para segurança, por exemplo:

$ users = Users :: addUser ($ encryptedTrustToken, 'jim', $ encryptedPassword, 'James', 'Taylor');

e isso criaria um novo usuário no aplicativo do servidor.

Serviços Web padrão

No final, os serviços Web padrão basicamente fazem a mesma coisa. A única vantagem que eles têm é que o cliente pode descobrir seus detalhes via WSDL. Mas, além disso, se eu quiser escrever um código de wrapper que permita ao desenvolvedor instanciar, editar e salvar objetos remotamente, ainda preciso implementar o código de wrapper. O SOAP não faz nada disso para mim, pode fazer o seguinte:

$soap = new nusoap_client('http://localhost/test/webservice_user.php?wsdl', true);
$user = $soap->getProxy(); 
$lastName = $user->lastName();

mas se eu quiser editar e salvar:

$user->setLastName('Jones');
$user->save();

então eu preciso, por exemplo lidar com todo o estado no lado do servidor, o SOAP não parece conter esse objeto no lado do servidor para cada cliente.

Talvez haja limitações na implementação do SOAP do PHP que estou usando (nusoap). Talvez as implementações Java e .NET façam muito mais.

Gostará de ouvir seus comentários para esclarecer algumas dessas nuvens.

questionAnswers(5)

yourAnswerToTheQuestion