RESTfulプローブの4(Restlets)

7117 ワード

Restlets Restletプロジェクトは、「RESTコンセプトとJavaクラス間のマッピングを確立する」ために、軽量レベルで包括的なフレームワークを提供します.これは、REST Webサービスだけでなく、任意の種類のRESTシステムを実現するために使用することができる.The Restlet framework Restlet application are akin to servlet applications in that they reside in a container,but in practice they are quite different in two major ways,First,Restlets use no direct notion of HTTP or its stateful manifestations such as cookies or sessions ,per se.Second,the Restlet framework is extremely lightweight.As you'll see ,a fully functional RESTful application can be built with a handful of classes that extend from a few core Restlet base classes.Configuration and deployment leverage existing container models,so you simply update the customary web.xml file and deploy a standard Web archive(WAR)file. Restletアプリケーションはservletアプリケーションと同様にコンテナに存在する.しかし、実際の操作では、彼らは2つの大きな面で大きな違いがあります.1、Restletsには直接的なHTTP概念がなく、cookiesやsessionsのような彼自身の状態表現もありません.二、Restletsフレームは非常に軽量です.ご覧のように、フル機能のRESTfulアプリケーションでは、Restletベースクラスから継承されているクラスがいくつかしかありません.既存の統合モードの導入を構成するには、通常のWebを簡単に更新するだけです.xmlファイルと配置杭WARファイル.For the most part,the bulk of a RESTful application built with the Restlet framework requires the use of two base classes:Application and Resource.Logically speaking,an Application instance maps URIs to Resource instances.Resource instances do the work of handling the basic CRUD commands,which are,of course ,mapped to GET,POST,PUT,and DELETE. ほとんどの場合、Restletフレームワークに基づくRESTfulアプリケーションには、アプリケーションとResourceの2つの継承クラスが必要です.論理的には、1つのアプリケーションインスタンスがURIsをResourceインスタンスにマッピングする.ResourceインスタンスはCRUDコマンド操作をサポートします.The race application You create a starting point with the Restlet framework by extending from the framework's Application class.In this class,you define Resources that respond to URIs.This definition process is done with the framework's Router class.For example,if you have a URI such as order/order_id,you need to specify which object can handle these requests.This object is an instance of the framework's Resource type.You link objects with URIs by attaching them to a Router instance,as in Listing5:
Router router = new Router(this.getContext());
router.attach("order/{order_id}", Order.class);

アプリケーションから継承された出発点を作成します.このクラスではURIsに応答するResources,すなわちフレームワークのRouterクラス実装を定義する.例:URI order/order_id、このリクエストを処理するオブジェクトを指定する必要があります.このオブジェクトはフレームワークResourceタイプのインスタンスです.オブジェクトとURIsとの関連付けは,Routerインスタンスに付加することによって実現される.So in this example, the URI order/order_id is logically mapped to an Order class (which, in turn, extends Resource). この例では、OrderクラスとURI order/order_idロジックがマッピングされます.
Acme Racing has the four logical RESTful URIs that you've already defined - four patterns that work with various aspects of races and runners:
      */race
      */race/race_id
      */race/race_id/runner
      */race/race_id/runner/runner_id
あなたはAcme Racingのために4つの論理RESTful URIsを定義しました.4つのモードは各方面のracesとrunnersサービスです.
The behavior of each URI(such as if it works with POST,DELETE,GET,and so on)is'not important at this point.The behavior of each Resource is the job of a Resource instance; however,the Application instance is used to map these URIs to (yet-to-be-defined)Resources via a Router instance,as shown in Listing6:

public class ReceApplication extends Application{
      public RaceApplication(Context context){
       super(context);
    }
      public Restlet createRoot(){
       Router router = new Router(this.getContext());
       router.attach("/race",RacesResource.class);    
       router.attach("/race/{race_id}",RaceResource.class);
       router.attach("/race/{race_id}/runner",RaceRunnersResource.class);
       router.attach("/race/{race_id}/runner/{runner_id}",
       RaceRunnerResource.class);
       return router;
    }
}

Applicationから継承されたインスタンスは、上記のコードに示すように、Routerインスタンスを介してURIsをResourcesにマッピングするために使用されます.    The base class,Application,is an abstract class.Extending classes must implement the createRoot() method.In this method, you can create a Router instance and attach Resources to URIs as i've done in List6. Applicationは抽象クラスであり、彼のサブクラスはcreateRootメソッドを実装しなければならない.このメソッドでは、RouterインスタンスをURIsに追加するResourcesを作成することができる.Race resources Now that you've defined the Application instance to handle four different URI patterns,you must implement the four Resources. Resource types in the Restlet framework are known as Restlets.They are the heart of any RESTful application developed with the Restlet framework.Unlike the Application type.the base Resource class is not abstract.It's more like a template with default behavior that you can override as needed. Applicationインスタンスでは、4つのURIモードを定義しました.もう4つのResourcesを実現しなければなりませんResourceタイプはRestletフレームワークでRestletsと呼ばれます.彼らはRestletフレームワークの下でRESTfulアプリケーションの核心である.Applicationタイプとは異なり、ベースResourceクラスは抽象的ではありません.彼はデフォルトの方法のあるテンプレートを考えています.必要な方法を書き直すだけです.At a high level,Resource has four methods that require overriding.Not coincidentally,they map to the basic HTTP commands that are the touchstone of REST-GET,POST,PUT,DELETE.because the Resource class is nonabstract,the framework requires a paired method to be implemented for desired behavior to be invoked.For instance,if you want a particular resource to respond to DELETE requests,you would first implement the delete() method.Second, you also must implement the allowDelete() method and have this method return true(it defaults to false).By default,the corresponding PUT,POST,and DELETE allow methods return false,and the alllowGet() method return true.this means for read-only Resources,you need to override only one method(instead of two in the other three cases).You can alternatively call the setModifcation(true) in a Resource class and thus not have to override individual HTTP verb allow methods. Resourceクラスには4つの方法があります.これは偶然ではない.彼らがHTTPにマッピングした4つのコマンドは,REST−GET,POST,PUT,DELETEの試金石である.Resourceクラスは抽象的ではないため,RESTフレームワークは期待される動作が呼び出されるように一連の方法を必要とする.たとえば、指定したresourceにDELETEリクエストに応答させたい場合は、まずdelete()メソッドを実装し、allowDelete()メソッドを実装し、このメソッドをtrueに戻す必要があります.デフォルトでは、対応するPUT、POST、and DELETEメソッドは、falseの戻り値を許可し、alllowGet()メソッドはtureに戻ります.これは、読み取り専用Resourcesの場合、1つのメソッドを再ロードするだけです(他のいくつかの場合は2つのメソッドが必要です).resourceクラスでsetModifation(true)メソッドに選択的にアクセスできます.したがって、個人のHTTP動詞メソッドを書き換える必要はありません.For instance,the RacesResource is intended to respond to GET requests with XML document that describes the races in the system.Users can also create new races via this Resource type.Therefore,the RacesResource class overrides at least three methods from the Resource base class:        *getRepresentation()        *allowPost()        *post() Remember, Resources instances, by default, are read-only. Hence the allowGet() method doesn't need to be overridden. 原理的なものばかりですが、具体的な開発例を示します.
http://www.lifeba.org/arch/restlet_develop_jax-rs_service_1.html