使用 RESTful 的方式開發 Web應用

    RESTful是火了好久的一種開發方式。這裏有一篇文章對於 RESTful 的定義介紹的還比較詳細:https://my.oschina.net/u/2369492/blog/656717。而本文就再也不這裏對於 RESTful 定義作過多介紹了。java

    下面咱們來看一看使用 Hasor 該如何進行 RESTful 方式的開發。設計模式

    Hasor 中進行 RESTful 的開發須要經過 Controller 來實現。有關 Controller 能夠參考下面這兩篇入門文章:restful

    1.https://my.oschina.net/u/1166271/blog/753001《用 Hasor 談一談MVC設計模式》
    2.https://my.oschina.net/u/1166271/blog/753718《接受 Request 請求並獲取請求參數》app

    咱們以最簡單的 Controller 開始逐步深刻。下面這個就是最簡單的 Controller,咱們逐步深刻。 post

@MappingTo("/restful/index.htm")
public class UserInfoAction {
    public void execute() {
        //
    }
}

    資源的表示:咱們以展示user信息爲例子,一個合規的 RESTful 方式描述用戶資源應該相似這樣:url

    「/users/238693/info.htm」,其中「238693」是用戶ID。對於這個用戶的刪改查,操做要對應到 post、get、delete。新增用戶由於尚未生成ID因此咱們經過 post 請求「/users/add」來實現。spa

    獲取用戶信息的請求應該是 get 方式訪問「/users/238693/info.htm」來提供.net

    若是是修改那麼就把要修改的表單post方式遞交到「/users/238693/info.htm」設計

    在開始以前咱們先把 User 的結構定義下來。rest

public class UserDO {
    private long   id;
    private String email;
    private String account;
    private String password;
    private Date   createTime;
    private Date   modifyTime;
    ...
}

    接着咱們定義 User 的 FormBean。

public class UserForm {
    @ReqParam("email")
    private String email;
    @ReqParam("account")
    private String account;
    @ReqParam("password")
    private String password;
}

 

新增用戶

    咱們新建 Users Controller,這個 Controller 咱們讓它只能接受 post 請求。

@MappingTo("/restful/users")
public class Users {
    @Post
    public void execute(@Params() UserForm userForm) {
        //
    }
}

    咱們看到此次咱們使用了 @Post 註解,這個類的意思是。咱們的這個 Users 類是一個 Controller 而且負責接受來自 「/restful/users」的請求。同時這個請求必須是 http post請求。請求參數經過 userForm 參數封裝的 FormBean 傳遞進來。

獲取用戶信息

    表示用戶信息的URL有一些特殊「/users/238693/info.htm」在這個字符串裏數字部分是用戶ID,它是可變的。咱們須要把 url 中的某一段文本設定爲請求參數。那麼只須要像下面這樣映射 UserID

@MappingTo("/restful/{userID}/info.htm")
public class UserInfo {
    public void execute() {
        //
    }
}

    接下來咱們經過 @PathParam 註解來獲取 URL 中被標記爲參數的數據。同時這一次咱們標記 Controller 的方法只負責處理 http 的 get 請求

@MappingTo("/restful/{userID}/info.htm")
public class UserInfo {
    @Get
    public void execute(@PathParam("userID") long userID, RenderData renderData) {
        //
    }
}

    剩下的就是把數據寫入到 Response了,或者交給模版渲染出來。

 

修改&刪除用戶信息

    修改操做由於和查詢操做都是表示的同一個資源,所以咱們使用現有的 Controller 來完成接收請求。這裏要額外說明一下 execute 是 Controller 的默認接受請求的處理方法。接受處理請求的方法能夠是任意一個。如今咱們把修改用戶信息的方法也加進來。由於修改是 post 遞交所以使用 @Post 註解。

    順便爲了閱讀方便咱們把展示用戶信息的方法名也換一換

@MappingTo("/restful/{userID}/info.htm")
public class UserInfo {
    @Get
    public void info(@PathParam("userID") long userID, RenderData renderData) {
        //
    }
    @Post
    public void update(@PathParam("userID") long userID, @Params() UserForm userForm, RenderData renderData) {
        //
    }
    @Delete
    public void delete(@PathParam("userID") long userID, RenderData renderData) {
        //
    }
}
相關文章
相關標籤/搜索