Ao contrário do DESCANSO, é rather uncommon ver
os pedidos gerados manualmente, embora pode ainda ser feito.
Geralmente, os pedidos do SABÃO são gerados com uma ferramenta
genérica (como NuSOAP ou Pear:SOAP) ou com uma classe
application-specific ou o módulo. A geração manual é coberta
aqui (uma compreensão boa de como trabalha virá em útil),
as.well.as NuSOAP.
As ferramentas application-specific estão indo ser
ignoradas, para razões de um par. Pela definição são
específico da aplicação, e conseqüentemente não muito útil neste
artigo genérico. Secondly, as ferramentas têm relações e
níveis variando da funcionalidade, e a fim fazer a justiça que do
tópico requereria um olhar in-depth. Finalmente, eu sou
firmemente da opinião que se você puder figurar para fora de como
lhe fazer o trabalho com NuSOAP (ou cru, para essa matéria), você
puder começar a ferramenta application-specific trabalhar demasiado.
Geração Manual
Gerar pedidos do SABÃO não é manualmente
demasiado diferente de gerar pedidos do DESCANSO. O processo de
gerar o pedido e realmente de transmiti-lo é rachado em duas
funções separadas, para demonstrar finalidades.
Para gerar o pedido próprio, eu escolhi usar uma corda
pregenerated, e povoo meramente os valores requeridos no runtime.
Há umas opções mais complexas (tais como criar o original
dentro de SimpleXML, ou o criar do risco cada um funcionado), mas não
são requeridos realmente:
functioncreaterequest($devkey, #,
#, #)
{
$request = "<?xmlversion=\"1.0 \ "= codificando \"
UTF-8 \ "standalone=\"no \ "? >
< SOAP-ENV:Envelope
/ de
xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope \"
xmlns:xsd=\"http://www.w3.org/2001/XMLSchema \"
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance \"
>
< SOAP-ENV:Body >
< devkey xsi:type=\"xsd:int\">$devkey</devkey >
< ação xsi:type=\"xsd:string\">$action</action >
< datilografe xsi:type=\"xsd:string\">$type</type >
< keyword xsi:type=\"xsd:string\">$keyword</keyword >
</SOAP-ENV:Body >
</SOAP-ENV:Envelope > ";
retorno #;
}
Como você pode dizer, a função é
aproximadamente tão simples justo como pode começar. Anote que
as variáveis URL-NÃO estiveram codificadas; isso é porque
não estão sendo emitidos no URL (os sons óbvios, mas nele são
também fáceis de faltar).
Realmente, chamar o API para transmitir o pedido envolve
pedir algum código do primeiro exemplo do DESCANSO, porque o pedido
será emitido a cru esta vez.
functioncallsoapapi($data)
{
$url = "http://library.example.com/api/soap/search";
$url_info = parse_url($url);
anfitrião de $host =‘de $url_info[ ' ];
trajeto de $path =‘de $url_info[ ' ];
Eu poderia apenas ter povoado as variáveis de $host e de
$path no início, mas este deve estar mais desobstruído. Em um
sistema de produção, você poderia conservar alguns ciclos do
processador central hardcoding estes elementos.
#, 80);
fputs($fp, "COMEÇAM". "HTTP/1.1\r\n de $path");
fputs($fp, "anfitrião: ". #
");
fputs($fp, "aceitam: */* \r\n");
fputs($fp, "Accept-Charset:ISO-8859-1, utf-8;q=0.7,
*;q=0.7\r\n");
fputs($fp, "Connection:close\r\n");
fputs($fp, "Content-Type:application/soap+xml\r\n");
fputs($fp, "Índice-Comprimento: ".strlen($data).
"\r\n\r\n");
fputs($fp, "# ");
Este bloco é quase idêntico ao exemplo precedente.
O exemplo precedente era um pedido do BORNE, visto que este é
um pedido COMEÇAR, uma mudança por que fosse ditado o que API você
está trabalhando com. O Índice-Tipo encabeçamento é
diferente refletir exatamente o que você está emitindo e esta vez
naturalmente você tem $data a emitir, assim que o
Índice-Comprimento não será 0.
# = "";
while(!feof($fp))
{
#, 128);
}
fclose($fp);
list($http_headers, $http_content)=explode("\r\n\r\n",
#);
retorno #;
}
Esta seção é também idêntica ao exemplo do
DESCANSO. Envolver ambas aquelas funções para recuperar uma
resposta é somente mal worth mencionar:
$request = createRequest('123 ', ' busca ', ' book',
'style);
# = callsoapapi($request);
Não era demasiado duro!
Ao contrário do DESCANSO, você não pode apenas usar o
file_get_contents() bater o API, porque você necessita emitir o corpo
de XML com o file_put_contents() do pedido não trabalhará tampouco,
porque você necessita os retornos da resposta (file_put_contents() um
interno), mas há outras opções. A pera (http://pear.php.net),
para o exemplo, tem um grupo das funções HTTP-ESPECÍFICAS que podem
fazer exame de algum do headache manualmente de criar o pedido fora de
suas mãos, mas permite-lhe ainda toda a flexibilidade que você
começa com criação manual.
Geração com NuSOAP
Para qualquer coisa à excepção de um programa
one-shot, eu recomendaria definitivamente ir com alguma sorte de um
módulo do SABÃO fazer sua vida do coding mais fácil. Embora,
se você funcionar em problemas, os seguir para baixo possa ser um
pouco uma dor. Eu gosto de usar uma caixa local do
desenvolvimento durante o desenvolvimento, assim que começo das
coisas que vai awry mim posso usar um tubo aspirador de pacote olhar o
request/response em seu formulário cru.
Conceptual, usar NuSOAP não é demasiado diferente de
terminar a tarefa manualmente. O objeto é inicializado, o
payload é criado, e o pedido é emitido. A diferença chave
aqui é que NuSOAP está fazendo todo o trabalho sujo.
require('../lib/nusoap.php ');
$client = soapclient("http://library.example.com/api/soap/wsdl
novo/", rectificam);
O objeto de $client é criado aqui. Duas opções
estão disponíveis ao criar um soapclient novo: Você pode ou
especificar a lima do wsdl para o serviço (e para ajustar o segundo
parâmetro para rectificar), ou especifique o endpoint para a chamada
(e ajuste o segundo parâmetro a falso). Sempre que possível,
eu gosto de usar a lima do wsdl; o módulo de NuSOAP pode travar
alguns de seus erros que a maneira, e ele assegura de que diferente
peça tipos que todos vão ao endpoint correto.
$params = array(
' devkey ' = > ' 123',
' ação ' = > ' busca ',
' tipo ' = > ' livro ',
' keyword ' = > ' estilo '
);
Preparar os parâmetros para a transmissão é métodos de
um bocado mais fàcilmente do que mais cedo.
# = ' http://library.example.com ';
$action = ' http://library.example.com/api/soap/search ';
$method = "SearchRequest";
$result = # call($method>,
array(‘SearchRequest ' = >
#),
#, #);
Finalmente, o último poucos parâmetros é ajustado, e a
chamada própria é feita.