Há dois lados a este tale, o primeiro é como gerar pedidos legitimate do DESCANSO, e o segundo é como segurar corretamente as respostas.
Quando vem a gerar o pedido, você tem três opções principais. Primeiramente, você pode gerar o pedido manualmente, usando o encabeçamento de PHP funciona. Isto dá-lhe a flexibilidade completa em gerar o pedido, mas envolve a maioria de coding. Em segundo, você pode usar uma de funções internas do pedido de PHP tais como o file_get_contents() ou file()/fopen(), fread(), e fclose(). Com este método, os muitos da informação detalhada são segurados automaticamente por PHP, e você recebe a mesma resposta. Finalmente, você pode usar uma classe feita sob encomenda projetada ser usado com o API na pergunta. Geralmente estas classes não requerem nada mais do que a lista do parâmetro, e retornarão os resultados no formulário de um objeto feito sob encomenda ou fá-los-ão acessíveis através de uma classe.
Gerar pedidos é manualmente somente complicado a primeira vez, após o esse, código-reúso e o pontapé da modularidade dentro. Conceptual a função que gerará o pedido é consideravelmente básica. Primeiramente, todos os parâmetros do pedido são preparados para assegurar a transmissão apropriada. Em seguida, o URL para o endpoint é gerado, analisado gramaticalmente então e quebrado acima em suas peças componentes. Finalmente, o pedido próprio é emitido usando os soquetes:
functioncallapi($endpoint, #,
#, #, #)
{
$action = urlencode($action);
$type = urlencode($type);
$keyword = urlencode($keyword);
|
|
Três dos parâmetros passados são URL codificados. Isto é necessário para assegurá-los é passado corretamente sobre o URL. No exemplo precedente, uma busca para o "estilo" foi executada; se a busca fosse preferivelmente do "livro estilo," o espaço requereria o encoding, tendo por resultado style%20book. Eu negligenciei codificar as variáveis do devkey, confiando em que a autoridade emitindo fêz exame de como seria usada na consideração ao as criar.
$url =
$endpoint."?devkey=$devkey&action=$action&type=$type&keyword=$keyword";
$url_info = parse_url($url);
$host = # ' ];
$path = # ' ]. "?" pergunta‘de.$url_info[ ' ];
$data = "";
O URL próprio é gerado aqui, including os parâmetros agora URL-CODIFICADOS. O URL necessita ser deconstructed para baixo a suas peças componentes para o uso na conexão crua do soquete.
#, 80);
fputs($fp, "BORNE". "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/x-www-form-urlencoded\r\n");
fputs($fp, "Índice-Comprimento: ".strlen($data).
"\r\n\r\n");
fputs($fp, "# ");
A informação gerada pelo código precedente é emitida aqui finalmente. A primeira linha do fputs() emite o trajeto ao original pedido, e a segunda linha especifica o anfitrião desejado.
# = "";
while(!feof($fp))
{
#, 128);
}
fclose($fp);
list($http_headers, $http_content)=explode("\r\n\r\n",
#);
retorno #;
}
Finalmente, a resposta é recuperada e o índice da resposta é retornado. Você aprende como segurar respostas nas seções que tratam desse lado das coisas logo.
Utilizando funções internas da lima de PHP, o mesmo processo pode ser terminado com muito menos código (embora você tem menos flexibilidade). Conceptual esta função trabalha o mesmo que precedente, a não ser que todas as chamadas do soquete da lima sejam substituídas com a uma chamada ao file_get_contents():
functioncallapiquick($endpoint, #,
#, #, #)
{
$action = urlencode($action);
$type = urlencode($type);
$keyword = urlencode($keyword);
$url =
$endpoint."?devkey=$devkey&action=$action&type=$type&keyword=$keyword";
$response = @file_get_contents($url);
retorno #;
}
Não há realmente muito a explicar com este exemplo. O encoding do URL foi discutido previamente, e a única chamada do file_get_contents() segura toda a mágica. O ampersand na frente da ligação de controle é usado suprimir todos os avisos que puderem se levantar de uma lima ou de um URL inexistente, porque estes devem ser segurados pela função de chamada (file_get_contents() retornarão falso nestes exemplos). Nos ambientes pre-PHP5 você necessitará usar o fopen() em vez do file_get_contents(). Alguma flexibilidade é perdida com este tipo do pedido, porque você pode não mais por muito tempo ajustar os encabeçamentos feitos sob encomenda ou os encabeçamentos opcionais, que podem ser requeridos ou muito desejável dependendo do API com que você está interagindo.
Enquanto a popularidade da correia fotorreceptora presta serviços de manutenção os aumentos, assim que querem o prevalence de classes do prebuilt segurar o trabalho sujo realmente da interação com o usuário. Se o serviço que você quer interagir com tiver uma classe disponível, ele for definitivamente worth olhar em. Alcançar a classe naturalmente será dependente da classe própria. Deve vir com documentação suficiente, e o acesso provavelmente não diferirá demasiado dos exemplos mais adiantados — apenas com pouco mais verificar de erro (você esperança). Algo manter-se na mente é que muitos módulos do prebuilt estão desenvolvidos e mantidos por terceiros partidos, e como tais você puderam ter que esperar um quando depois que as características novas são liberadas no API para que se tornem disponíveis com sua classe.
Como você trata da resposta depende de que método de o emitir ao pedido escolha. Se você gerar o pedido ou manualmente ou com o dae (dispositivo automático de entrada) de uma de funções internas de PHP (como o file_get_contents()) você necessitará também segurar manualmente a resposta. Se você usar um módulo third-party, terá sua própria relação para recuperar resultados.
A resposta forneceu pelo usuário deve ser um original de XML; felizmente, XML foi projetado ser fácil de analisar gramaticalmente. Infelizmente, não importa como foi projetado, manualmente analisar gramaticalmente qualquer coisa não é geralmente muitos do divertimento. PHP5 vem com SimpleXML, que faz a manipulação de originais de XML uma brisa. Os usuários PHP4 não têm SimpleXML; entretanto, alguns módulos third-party como MiniXML estão disponíveis que execute funções similares.
Uma vez que você recebeu a resposta, furá-la em um objeto de SimpleXML deve ser uma brisa. Usando o exemplo da biblioteca e a função precedentes do pedido, você termina acima com algo como este:
# =
callAPIQuick('http://library.example.com/api.php ', ' 123', ' busca
',
' livro ',‘estilo ');
if($response)
{
$xml = simplexml_load_string($response);
print_r($xml);
}else
{
eco do "alimentação do carregamento erro";
}
Aqui, a resposta não é falsa (e daqui algo, presumably o XML que você esperava para, foi retornado). Anote que esta suposição é geralmente válida bonito. Quando um usuário que fornece um API encontra um erro, deve fornecer o erro em um formato agradável de XML. A função do simplexml_load_string() faz exame da resposta e gira-a em um objeto de XML que possa diretamente ser alcançado, iterado completamente, e assim por diante. Finalmente, a função do print_r() resulta em uma saída user-friendly que mostra os índices do objeto, mostrados aqui:
Objeto De SimpleXMLElement
(
[ Pedido ] = > Objeto De SimpleXMLElement
(
[ RequestId ] = > 123a456
[ Parâmetros ] = > Objeto De SimpleXMLElement
(
[ Argumento ] = > Disposição
(
[ 0 ] = > Objeto De SimpleXMLElement
(
)
[ 1 ] = > Objeto De SimpleXMLElement
(
)
[ 2 ] = > Objeto De SimpleXMLElement
(
)
[ 3 ] = > Objeto De SimpleXMLElement
(
)
)
)
)
[ Resposta ] = > Objeto De SimpleXMLElement
(
[ ResultCount ] = > 2
[ Artigo ] = > Disposição
(
[ 0 ] = > Objeto De SimpleXMLElement
(
[ Título ] = > Livro Vol 1 Do Estilo
[ Status ] = > Para fora
[ preensões ] = > 3
[ CopiesOnHand ] = > 2
[ Autor ] = > Corça De Jon
)
[ 1 ] = > Objeto De SimpleXMLElement
(
[ Título ] = > Livro Vol 2 Do Estilo
[ Status ] = > Dentro
[ preensões ] = > 0
[ CopiesOnHand ] = > 1
[ Autor ] = > Corça De Jon
)
)
)
)
Olhando essa saída, as coisas de um par devem ser imediatamente óbvias:
SimpleXML faz muitos de coisas realmente úteis para você muito rapidamente.
Os objetos resultantes não indicam atributos (veja a lista do argumento sob parâmetros). Os dados estão dentro lá, ele não são mostrados apenas com um print_r().
As disposições começam contar em 0 (apenas como em toda parte mais em PHP, é justo algo se manter na mente).
A disposição do artigo é implorar justo a ser segurado com um laço do foreach().
Carregando toda essa informação na mente, um par de linhas rápidas do código é tudo que é requerido para explorar mais inteiramente o índice.
eco "que você procurarou por: {# request->parameters->argument[3]->value}<br>> ";Aqui a contagem da pergunta e do resultado da busca é apresentada, e os resultados eles mesmos são iterados então completamente. A sintaxe começa um pouco estranho quando tratar das disposições (como demonstrado quando a pergunta da busca está imprimida), assim que do ele é frequentemente sensible iterar com elas para maior clareza.
O DESCANSO é um método eficaz de perguntar APIs remoto quando é permissível para a parcela do pedido de sua transação ocorrer no espaço livre. Criar perguntas do DESCANSO é tão fácil quanto URL-CODIFICANDO os parâmetros requeridos e especificar um endpoint para a chamada. Tratar das respostas do DESCANSO pode ser um pouco mais complicado; entretanto, por ferramentas leveraging goste de SimpleXML, ele demasiado pode ser terminado rapidamente.
Online: 532 users browsing the articles directory
|
|