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.