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。