Как получить ответ от веб-службы REST WCF с помощью PHP - PullRequest
2 голосов
/ 26 августа 2011

У меня есть встроенный веб-сервис .net, который выглядит примерно так:

[ServiceContract]
public interface IRestService
{
    [OperationContract]
    [WebGet(UriTemplate = "object/{name}")]
    Object GetObject(string name);
}

public class api : IRestService
{
    OSAE.OSAE osae = new OSAE.OSAE("WebService");

    public Object GetObject(string name)
    {
        // lookup object 
        OSAEObject OSAEobj = osae.GetObjectByName(name);
        Object obj = new Object();
        obj.Name = OSAEobj.Name;
        obj.Address = OSAEobj.Address;
        obj.Type = OSAEobj.Type;
        obj.Container = OSAEobj.Container;
        obj.Enabled = OSAEobj.Enabled;
        obj.Description = OSAEobj.Description;

        return obj;
    }
 }

Это даст ответ, который выглядит так, когда я просто использую браузер для его вызова:

<Object xmlns="http://schemas.datacontract.org/2004/07/OSAERest" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Address/>
<Container>SYSTEM</Container>
<Description>Email</Description>
<Enabled>0</Enabled>
<Name>Email</Name>
<Properties xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays" i:nil="true"/>
<Type>EMAIL</Type>
</Object>

Мне нужно иметь возможность использовать это с PHP.Я пытался использовать Pest (https://github.com/educoder/pest),, но у меня ничего не получается. Вот моя попытка:

<?php
require_once 'Includes/PestXML.php';
$pest = new PestXML('http://localhost:8732/api');
$things = $pest->get('/object/email');
$names = $things->xpath('//Object/Description');
while(list( , $node) = each($names)) {
    echo $node,"\n";
}
?>

Как правильно использовать ответы веб-служб с помощью PHP?

1 Ответ

2 голосов
/ 07 декабря 2012

Измените объявление WebGet на следующее:

[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "object/{name}")]

Затем вы можете получить ответ в PHP, просто вызвав json_decode ($ result).(пример ниже)

$url = "http://localhost:8732/api/object/wibble";
$response = file_get_contents($url);

$jsonData = json_decode($response);

var_dump($jsonData);

Если вы установите для второго аргумента "json_decode" значение true, вы получите ассоциативный массив, а не граф объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...