Web2py-services
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 + "<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サービスの実装を管理します。