Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cobrinhakiller

WEB SERVICE e PHP

Recommended Posts

Boa noite galera do iMaters, venho aqui em busca de conhecimento sobre como desenvolver WEB SERVICE usando a biblioteca SOAP do PHP.

 

Tenho o CRUD em MVC rodando em um servidor web (conectado ao banco Progress OpenEdge via driver ODBC) onde o SERVER da Web Service será implementado (inicialmente fará consultas no banco de dados, futuramente fará inserção, atualização e o famoso DELETE). O CLIENT que irá consumir o SERVER ficará em outro servidor (que seria um site com uma área restrita e usando banco de dados MySQL). Lembrando que o WEB SERVICE é privado, terá segurança/permissões de acesso.

 

No mais é isso ai galera, espero que eu tenha sido claro, conto com a ajuda de vocês!

 

Grande abraço a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom,

 

Como você disse que sua aplicação é MVC, então acho que o diagrama abaixo é adequado:

 

Aplicacao.png

 

Quando um usuário usa sua aplicação, ele utiliza a interface gráfica de usuário, ou GUI, é onde temos os botões, campos de entrada de texto, etc...

 

Cada ação do usuário é recebida por um controlador que reage à essa ação.

 

O grande ponto aqui é a camada de negócios (Model):

 

Quando escrevemos webservices, não temos GUIs, temos uma interface que oferece "funções" em nossas aplicações.

 

Como você já tem uma camada de negócios, você precisa responder 2 perguntas:

 

O que você quer oferecer na sua API pública ?

O que é necessário enviar nas requisições, para obter as informações solicitadas ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Batista, valos lá:

 

O que você quer oferecer na sua API pública?

A princípio a API oferece uma lista de atendimentos referente ao usuário.

 

 

O que é necessário enviar nas requisições, para obter as informações solicitadas?

Como cada usuário terá sua própria lista de atendimento, será estabelecido como parâmetro o ID do usuário.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito,

 

Um ponto importante a se destacar aqui é que SOAP é um protocolo para trabalho com Objetos

 

Quando trabalhamos com orientação a objetos, a única forma de sabermos o que um objeto faz é através de sua interface.

 

Com SOAP é a mesma coisa, porém a interface nesse caso, chama-se WSDL.

 

Você disse que precisa listar os atendimentos de um usuário e que, para receber essa lista de atendimentos, precisaremos passar um ID.

 

Então vamos dizer que nosso método de interface é: listaAtendimentos( id )

 

Quando esse método for chamado, quais os dados deverão ser retornados ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo Jhones!

 

Quando esse método for chamado, quais os dados deverão ser retornados?

Será retornado o Número do Atendimento, Data do Atendimento, Código do Contratante, Nome do Contato, Status do Atendimento, Assunto. (não necessariamente nessa ondem kkkk).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo,

 

Agora temos tudo o que precisamos para escrever a descrição (interface) do serviço:

 

service.jpg

 

service1.jpg

service2.jpg

 

O WSDL é a composição de alguns elementos:

 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions
name="service"
xmlns:im="urn:imasters"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:imasters">

<wsdl:types>
	<xsd:schema targetNamespace="urn:imasters">
		<xsd:element name="listaAtendimentosRequest" type="xsd:integer" />
		<xsd:element name="listaAtendimentosResponse">
			<xsd:complexType>
				<xsd:sequence>
					<xsd:element name="atendimento" type="im:Atendimento" minOccurs="0" maxOccurs="unbounded" />
				</xsd:sequence>
			</xsd:complexType>
		</xsd:element>

		<xsd:complexType name="Atendimento">
			<xsd:sequence>
				<xsd:element name="numero" type="xsd:integer" />
				<xsd:element name="data" type="xsd:string" /> <!-- O ideal aqui é ser xsd:date ou xsd:dateTime -->
				<xsd:element name="codigo" type="xsd:integer" />
				<xsd:element name="nome" type="xsd:string" />
				<xsd:element name="assunto" type="xsd:string" />
			</xsd:sequence>
		</xsd:complexType>
	</xsd:schema>
</wsdl:types>

<wsdl:message name="listaAtendimentosRequest">
	<wsdl:part element="im:listaAtendimentosRequest" name="parameters" />
</wsdl:message>
<wsdl:message name="listaAtendimentosResponse">
	<wsdl:part element="im:listaAtendimentosResponse" name="parameters" />
</wsdl:message>

<wsdl:portType name="service">
	<wsdl:operation name="listaAtendimentos">
		<wsdl:input message="im:listaAtendimentosRequest" />
		<wsdl:output message="im:listaAtendimentosResponse" />
	</wsdl:operation>
</wsdl:portType>

<wsdl:binding name="serviceSOAP" type="im:service">
	<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
	<wsdl:operation name="listaAtendimentos">
		<soap:operation soapAction="urn:imasters/listaAtendimentos" />
		<wsdl:input>
			<soap:body use="literal" />
		</wsdl:input>
		<wsdl:output>
			<soap:body use="literal" />
		</wsdl:output>
	</wsdl:operation>
</wsdl:binding>

<wsdl:service name="service">
	<wsdl:port binding="im:serviceSOAP" name="serviceSOAP">
		<soap:address location="http://seu-endpoint.dominio.com.br" />
	</wsdl:port>
</wsdl:service>
</wsdl:definitions>

 

Com a definição do WSL, o restante é simples.

 

Se estiver tudo ok com o WSDL, seguimos em frente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Man! Tentei consumir a Webservice mas meu cliente retorna apenas

stdClass Object ( );

Testei o método listaAtendimentos ( 'ID do usuário' ) no server.php, os dados foram retornados normalmente. Seria o problema na estrutura do WSDL?

 

Vlw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.