Web2py-services

提供:Dev Guides
移動先:案内検索

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)

上記の関数は、ユーザーがページにアクセスしたときのカウント数を増やします。 与えられた関数がweb2pyアプリケーションの*“ default.py” コントローラーで定義されていると仮定します。 ページは次のURLでリクエストできます- *http://127.0.0.1:8000/app/default/count

web2pyは、上記のページをさまざまなプロトコルで、URLに拡張子を追加することでレンダリングできます-

*http://127.0.0.1:8000/app/default/countl*
*http://127.0.0.1:8000/app/default/count.xml*
*http://127.0.0.1:8000/app/default/count.json*

上記のアクションによって返される辞書は、HTML、XML、およびJSONでレンダリングされます。

リモートプロシージャコール

web2pyフレームワークは、関数をWebサービスに変換するメカニズムを提供します。 ここで説明するメカニズムは、前述のメカニズムとは異なります。

  • 関数に引数を含める。
  • 関数はモデルで定義する必要があります。
  • より厳密なURL命名規則が適用されます。
  • プロトコルの固定セットで機能し、簡単に拡張可能です。
  • この機能を使用するには、サービスオブジェクトをインポートして開始する必要があります。

このメカニズムを実装するには、最初に、サービスオブジェクトをインポートしてインスタンス化する必要があります。

from gluon.tools import Service
service = Service()

これは、scaffoldingアプリケーションの "db.py" モデルファイルに実装されています。 Db.py モデルはweb2pyフレームワークのデフォルトモデルであり、データベースとコントローラーと対話して、ユーザーへの望ましい出力を実現します。

実装後、必要に応じて、モデルのサービスにコントローラーからアクセスできます。

次の例は、Webサービスなどを使用したリモートプロシージャコールのさまざまな実装を示しています。

ウェブサービス

Webサービスは、XML、SOAP、WSDL、UDDIなどのプロトコルを使用してWebベースのアプリケーションを統合する標準化された方法として定義できます。

web2pyはそれらのほとんどをサポートしていますが、統合は非常に難しいでしょう。

jQueryでweb2py JSONサービスを使用する

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 scaffoldコントローラーにあります。

消費者の行動とビューは次のとおりです-

{{extend 'layoutl'}}
<div id = "target"></div>

<script>
   jQuery.getJSON("{{= URL('call',args = ['json','get_days'])}}",
      function(msg){
         jQuery.each(msg, function(){ jQuery("#target").
         append(this &plus; "<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 の2番目の引数はコールバックで、JSON応答が渡されます。

この場合、コールバックは応答の各アイテム(文字列としての曜日のリスト)をループし、各文字列を <br/><div id = "target"> に追加します。

このように、web2pyは jQuery.getJSON を使用してWebサービスの実装を管理します。