Web2py - Услуги
web2py обеспечивает поддержку различных протоколов, таких как XML, JSON, RSS, CSV, XMLRPC, JSONRPC, AMFRPC и SOAP. Каждый из этих протоколов поддерживается несколькими способами, и мы делаем различие между:
- Отображение вывода функции в заданном формате.
- Вызов удаленных процедур.
Визуализация словаря
Рассмотрим следующий код, который поддерживает количество сеансов.
def count():
session.counter = (session.counter or 0) + 1
return dict(counter = session.counter, now = request.now)
Вышеупомянутая функция увеличивает количество отсчетов по мере того, как пользователь посещает страницу. Предположим, что данная функция определена в“default.py”контроллер приложения web2py. Страницу можно запросить по следующему URL-адресу -http://127.0.0.1:8000/app/default/count
web2py может отображать указанную выше страницу в разных протоколах и путем добавления расширения к URL-адресу, например:
http://127.0.0.1:8000/app/default/count.html
http://127.0.0.1:8000/app/default/count.xml
http://127.0.0.1:8000/app/default/count.json
Словарь, возвращаемый вышеуказанным действием, будет отображаться в HTML, XML и JSON.
Вызов удаленных процедур
Платформа web2py предоставляет механизм, который преобразует функцию в веб-службу. Описанный здесь механизм отличается от механизма, описанного ранее, потому что:
- Включение аргументов в функцию.
- Функция должна быть определена в модели.
- Он применяет более строгие правила именования URL-адресов.
- Он работает с фиксированным набором протоколов и легко расширяется.
- Чтобы использовать эту функцию, необходимо импортировать и запустить объект службы.
Чтобы реализовать этот механизм, сначала необходимо импортировать объект службы и создать его экземпляр.
from gluon.tools import Service
service = Service()
Это реализовано в "db.py" файл модели в приложении строительных лесов. Db.py model - это модель по умолчанию в платформе web2py, которая взаимодействует с базой данных и контроллером для достижения желаемого результата для пользователей.
После реализации к сервису в модели можно будет получить доступ из контроллеров по мере необходимости.
В следующем примере показаны различные реализации удаленных вызовов процедур с использованием веб-служб и многого другого.
Веб-сервисы
Веб-службы можно определить как стандартизованный способ интеграции веб-приложений с использованием таких протоколов, как XML, SOAP, WSDL и UDDI.
web2py поддерживает большинство из них, но интеграция будет довольно сложной.
Использование службы JSON web2py с помощью jQuery
Есть много способов вернуть JSON-форму web2py, но здесь мы рассмотрим случай службы JSON. Например -
def consumer():return dict()@service.json
def get_days():return ["Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat"]
def call():return service()
Здесь мы видим, что -
функция просто возвращает пустой словарь для визуализации представления, которое будет использовать службу.
get_days определяет службу, а вызов функции предоставляет все зарегистрированные службы.
get_days не обязательно должен быть в контроллере и может быть в модели.
call всегда находится в контроллере строительных лесов default.py.
Вид с действиями потребителя выглядит следующим образом -
{{extend 'layout.html'}}
<div id = "target"></div>
<script>
jQuery.getJSON("{{= URL('call',args = ['json','get_days'])}}",
function(msg){
jQuery.each(msg, function(){ jQuery("#target").
append(this + "<br />"); } )
}
);
</script>
Первый аргумент jQuery.getJSON это URL-адрес следующей службы - http://127.0.0.1:8000/app/default/call/json/get_days
Это всегда следует шаблону -
http://<domain>/<app>/<controller>/call/<type>/<service>
URL находится между {{...}}, потому что он решается на стороне сервера, а все остальное выполняется на стороне клиента. Второй аргументjQuery.getJSON - это обратный вызов, на который будет передан ответ JSON.
В этом случае обратный вызов проходит по каждому элементу ответа (список дней недели в виде строк) и добавляет каждую строку, за которой следует <br/> к <div id = "target">.
Таким образом, web2py управляет реализацией веб-сервисов, используя jQuery.getJSON.