Como executar a tecnologia do SABÃO


  Share  
|

Como o DESCANSO, executar o SABÃO envolve gerar pedidos e então segurar a resposta. Visto que segurar a resposta do SABÃO é similar ao resultado do DESCANSO, gerar o pedido do SABÃO é completamente diferente.

Gerando Pedidos

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.

Segurando a resposta

Segurar uma resposta de um pedido do SABÃO não é outra vez demasiado diferente da resposta que do DESCANSO—ambos são fornecidos em formatos similares de XML. A resposta do SABÃO carrega os elementos adicionais do envelope e do corpo, mas frequentemente dados do presente em uma maneira similar dentro daqueles elementos. Há naturalmente alguma variação entre a manipulação da resposta de um pedido manual e de um pedido de NuSOAP. Ambos os métodos são apresentados aqui.

Manualmente analisando gramaticalmente a resposta

Imitar a saída gerada com o pedido do DESCANSO usa o código similar, com algumas modificações para o esquema do encapsulation usado com SABÃO.

o echo"You procurarou for:{$xml->Body->LibrarySearchResponse->RequestInfo - >
keyword}<br > ";

o echo"Here é your{$xml->Body->LibrarySearchResponse->ResponseInfo- > ResultCount}
results<br > ";
foreach($xml->Body->LibrarySearchResponse->ResponseInfo->Item COMO &$item)
{
ecoe "{# title>} by{$item->Author}<br >";
}

Isto gerará a saída idêntica como o pedido do DESCANSO mostrado mais cedo. Anote a sintaxe diferente usada adquirir o keyword da busca. Não é um atributo esta vez, assim que o acesso é diferente.

Analisando gramaticalmente a resposta com NuSOAP

Alcançar o objeto fornecido por NuSOAP é um pouco diferente dos métodos usados com SimpleXML, mas a estrutura de dados interna é completamente similar. Modificar o código para trabalhar com o objeto de NuSOAP faz exame somente de alguns momentos.

o echo"You procurarou por: ".
# ' ] "<br >";
o echo"Here é seu
{# ' ]}
results<br > ";
foreach($xml['Body']['LibrarySearchResponse']['ResponseInfo']['Item ' ] COMO &$item)
{
eco "{#‘título ' ]} by{$item[‘Author']}<br >";
}

Com NuSOAP, os dados internos são muito alcançado a mesma maneira que uma disposição associativa, assim melhor que o método de OO de se usar - > para alcançar elementos da criança, uma informação mais adicional da disposição é incluída. Este elemento output idêntica ao exemplo precedente.

O SABÃO é um método eficaz de perguntar APIs quando as despesas gerais adicionais são permissíveis. O encapsulation de todos os elementos permite a leitura fácil, e o espaço variável dentro do pedido. Criar pedidos do SABÃO pode ser tão fácil quanto a escrita eles para fora uma vez, então variáveis chaves substituindo justas. Alternativamente, pode também ser realizado usando uma ferramenta tal como NuSOAP. Alcançar a resposta do SABÃO pode ser realizado no muito a mesma maneira que a resposta do DESCANSO quando o pedido foi terminado manualmente. No exemplo dos pedidos terminados com NuSOAP, o método de acesso é estrutural idêntico, com somente algumas mudanças menores à sintaxe usada.

este é um artigo adicionado por Emanuela Hedrick


Share  

© 2005-2010 E-articles.info All Rights Reserved - Terms and conditions