2011-04-15 5 views
3

Я пытаюсь написать API веб-службы с использованием PHP и Yii. Это означает, что я буду использовать веб-службы SOAP, поскольку Yii напрямую не поддерживает веб-службы RESTful.Yii SOAP Web Service возвращает XML

Я хотел бы вернуть результаты в формате XML в виде строк (это может быть глупо, но я работаю с довольно громоздкими типами данных, что затруднит жизнь клиентам веб-служб, пытающимся их использовать). Проблема, с которой я сталкиваюсь, заключается в том, что возвращаемый XML-код содержит теги, что приводит к тому, что клиенты, которые не читаются корректно клиентом веб-службы.

Например, я могу вернуть эту строку в одном из моих веб-сервисов:

"hello"

Но не эту строку:

"<hello>"

(пустая строка считывается клиентом)

Итак, существует ли способ для веб-службы SOAP вернуть XML-документ в качестве строка (в общем, или, в частности, Yii)?

ответ

1

Это должно быть действительно сделано рамками (не знаю о Yii, хотя), но так как это, кажется, не работать автоматически, попробуйте спасаясь данные первого:

$data_to_send = htmlspecialchars($data_to_send); 

Если Yii не кодирует данные, ваш клиент увидит правильный вывод (необработанная строка XML) при извлечении данных из их библиотеки SOAP. Если Yii, однако, кодирует данные, он получит двойное кодирование, которое, вероятно, не то, что вы хотите, но если оно кодирует его, вы не должны иметь эту проблему в первую очередь ...

+0

Спасибо. Это действительно помогает решить проблему. Теперь мне просто нужно выяснить, правильно ли возвращать XML, используя SOAP. – Epicurus

1

Если ваш данные содержат символы, которые также являются тегами XML, вы можете использовать опцию CDATA.

<value><![CDATA[<hello>]]></value> 
0

Не используйте мыло. Это одна из тех самых худших технологий, которые когда-либо делались (см. Многочисленные сообщения о SO). Yii теперь поддерживает REST (полностью с 1.17). Просто используйте формат JSON. Вам нужно удалить или вставить с клиента?

+0

Yii делает REST а? Хорошо знать. –

+0

О, хорошо знать, что Yii теперь поддерживает REST. Я обязательно посмотрю. Тем не менее, у меня все еще есть некоторые проблемы с его использованием, так как мне нужно будет выполнять операции вставки и удаления с клиента (это будет довольно обширный API). Кроме того, требования безопасности приводят к некоторым сомнениям в использовании REST. Сначала пользователи API должны быть аутентифицированы, а отправка учетных данных (или токенов) через URL-адрес кажется не столь безопасным решением. – Epicurus

+0

vlad.acretoaie, отправка учетных данных через URL-адрес так же безопасна, как отправка их в SOAP-вызов (или POSTing их в этом отношении). Во всех этих случаях вы отправляете все в открытом виде. Если вам нужна безопасность, используйте шифрование (HTTPS с сертификатом, подписанным третьей стороной), чтобы разоружить атаки «человек в середине». –

Смежные вопросы