Cherrypy-web-services
CherryPy-Webサービス
Webサービスは、アプリケーションまたはシステム間のデータ交換を支援するWebベースのコンポーネントのセットであり、オープンプロトコルおよび標準も含まれます。 Webで公開、使用、および検索できます。
Webサービスには、RWS(RESTfUL Webサービス)、WSDL、SOAPなどのさまざまなタイプがあります。
REST —代表的な状態の転送
リモートアクセスプロトコルの一種。リモートプロシージャを呼び出す代わりに状態を操作するために使用できるクライアントからサーバーに状態を転送します。
- 特定のエンコーディングまたは構造、および有用なエラーメッセージを返す方法を定義しません。
- HTTP「動詞」を使用して、状態転送操作を実行します。
- リソースは、URLを使用して一意に識別されます。
- これはAPIではなく、APIトランスポートレイヤーです。
RESTは、ネットワーク上のリソースの命名法を維持し、これらのリソースで操作を実行する統合メカニズムを提供します。 各リソースは、少なくとも1つの識別子で識別されます。 RESTインフラストラクチャがHTTPベースで実装されている場合、これらの識別子は* Uniform Resource Identifiers(URI)*と呼ばれます。
以下は、URIセットの2つの一般的なサブセットです-
Subset | Full form | Example |
---|---|---|
URL | Uniform Resource Locator | http://www.gmail.com/ |
URN | Uniform Resource Name | urn:isbn:0-201-71088-9 urn:uuid:13e8cf26-2a25-11db-8693-000ae4ea7d46 |
CherryPyアーキテクチャの実装を理解する前に、CherryPyのアーキテクチャに注目しましょう。
CherryPyには、次の3つのコンポーネントが含まれています-
- cherrypy.engine -プロセスの起動/分解およびイベント処理を制御します。
- cherrypy.server -WSGIまたはHTTPサーバーを構成および制御します。
- cherrypy.tools -HTTPリクエストの処理に直交するユーティリティのツールボックス。
CherryPyを介したRESTインターフェイス
RESTful Webサービスは、以下の助けを借りてCherryPyアーキテクチャの各セクションを実装します-
- 認証
- 承認
- 構造
- カプセル化
- エラー処理
認証
認証は、対話しているユーザーの検証に役立ちます。 CherryPyには、各認証方法を処理するツールが含まれています。
def authenticate():
if not hasattr(cherrypy.request, 'user') or cherrypy.request.user is None:
# < Do stuff to look up your users >
cherrypy.request.authorized = False # This only authenticates.
Authz must be handled separately.
cherrypy.request.unauthorized_reasons = []
cherrypy.request.authorization_queries = []
cherrypy.tools.authenticate = \
cherrypy.Tool('before_handler', authenticate, priority=10)
上記の関数authenticate()は、クライアントまたはユーザーの存在を検証するのに役立ちます。 組み込みのツールは、体系的な方法でプロセスを完了するのに役立ちます。
承認
承認は、URIを介してプロセスの健全性を維持するのに役立ちます。 このプロセスは、ユーザートークンリードによるオブジェクトのモーフィングにも役立ちます。
def authorize_all():
cherrypy.request.authorized = 'authorize_all'
cherrypy.tools.authorize_all = cherrypy.Tool('before_handler', authorize_all, priority=11)
def is_authorized():
if not cherrypy.request.authorized:
raise cherrypy.HTTPError("403 Forbidden",
','.join(cherrypy.request.unauthorized_reasons))
cherrypy.tools.is_authorized = cherrypy.Tool('before_handler', is_authorized,
priority = 49)
cherrypy.config.update({
'tools.is_authorized.on': True,
'tools.authorize_all.on': True
})
承認の組み込みツールは、前の例で述べたように、体系的な方法でルーチンを処理するのに役立ちます。
構造
APIの構造を維持すると、アプリケーションのURIをマッピングする作業負荷を軽減できます。 APIを見つけやすくクリーンな状態に保つことが常に必要です。 CherryPyフレームワークのAPIの基本構造には次のものが必要です-
- アカウントとユーザー
- 自動応答
- 接触
- File
- フォルダ
- リストとフィールド *メッセージとバッチ
カプセル化
カプセル化は、軽量で人間が読める、さまざまなクライアントがアクセスできるAPIの作成に役立ちます。 作成、取得、更新、削除に伴うアイテムのリストには、APIのカプセル化が必要です。
エラー処理
このプロセスは、APIが特定の本能で実行に失敗した場合、エラーを管理します。 たとえば、400は不正なリクエスト用で、403は不正なリクエスト用です。
例
データベース、検証、またはアプリケーションエラーの例として、以下を考慮してください。
import cherrypy
import json
def error_page_default(status, message, traceback, version):
ret = {
'status': status,
'version': version,
'message': [message],
'traceback': traceback
}
return json.dumps(ret)
class Root:
_cp_config = {'error_page.default': error_page_default}
@cherrypy.expose
def index(self):
raise cherrypy.HTTPError(500, "Internal Sever Error")
cherrypy.quickstart(Root())
上記のコードは、次の出力を生成します-
API(アプリケーションプログラミングインターフェース)の管理は、組み込みのアクセスツールにより、CherryPyを介して簡単に行えます。
HTTPメソッド
リソースで動作するHTTPメソッドのリストは次のとおりです-
S.No | HTTP Method & Operation |
---|---|
1. |
リソースメタデータを取得します。 |
2. |
GET リソースのメタデータとコンテンツを取得します。 |
3. |
POST リクエスト本文に含まれるデータを使用して、新しいリソースを作成するようサーバーに要求します。 |
4. |
PUT 既存のリソースを要求本文に含まれているリソースで置き換えるようにサーバーに要求します。 |
5. |
DELETE そのURIで識別されるリソースを削除するようサーバーに要求します。 |
6. |
OPTIONS グローバルに、または特定のリソースに対して機能に関する詳細を返すようにサーバーに要求します。 |
Atom Publishing Protocol(APP)
APPは、Webリソースの公開と編集を可能にするHTTPのアプリケーションレベルのプロトコルとしてAtomコミュニティから生まれました。 APPサーバーとクライアント間のメッセージの単位は、Atom XMLドキュメント形式に基づいています。
Atom Publishing Protocolは、HTTPとそのメカニズム、およびAtom XMLドキュメント形式をメッセージの単位として使用して、APPサービスとユーザーエージェント間の一連の操作を定義します。
APPは最初にサービスドキュメントを定義します。これは、APPサービスが提供するさまざまなコレクションのURIをユーザーエージェントに提供します。
例
APPがどのように機能するかを示すために例を挙げましょう-
<?xml version = "1.0" encoding = "UTF-8"?>
<service xmlns = "http://purl.org/atom/app#" xmlns:atom = "http://www.w3.org/2005/Atom">
<workspace>
<collection href = "http://host/service/atompub/album/">
<atom:title> Albums</atom:title>
<categories fixed = "yes">
<atom:category term = "friends"/>
</categories>
</collection>
<collection href = "http://host/service/atompub/film/">
<atom:title>Films</atom:title>
<accept>image/png,image/jpeg</accept>
</collection>
</workspace>
</service>
APPは、次の表に記載されているHTTPメソッドを使用して、コレクションのメンバーまたはコレクション自体に対して基本的なCRUD操作を実行する方法を指定します-
Operation | HTTP Method | Status Code | Content |
---|---|---|---|
Retrieve | GET | 200 | An Atom entry representing the resource |
Create | POST | 201 | The URI of the newly created resource via the Location and Content-Location headers |
Update | PUT | 200 | An Atom entry representing the resource |
Delete | DELETE | 200 | None |