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

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

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

from gluon.tools import Service
service = Service()

これはで実装されています "db.py" スキャフォールディングアプリケーションのモデルファイル。 Db.py modelは、web2pyフレームワークのデフォルトのモデルであり、データベースおよびコントローラーと対話して、ユーザーに目的の出力を提供します。

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

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

ウェブサービス

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

web2pyはそれらのほとんどをサポートしていますが、統合にはかなり注意が必要です。

jQueryでweb2pyJSONサービスを利用する

Web2pyからJSONを返す方法はたくさんありますが、ここでは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は間にあります {{...}}、それはサーバー側で解決され、他のすべてはクライアント側で実行されるためです。の2番目の引数jQuery.getJSON JSON応答が渡されるコールバックです。

この場合、コールバックは応答の各項目(文字列としての曜日のリスト)をループし、各文字列を追加し、その後に <br/><div id = "target">

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