日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单的REST的框架实现

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单的REST的框架实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

源代碼下載地址:http://download.csdn.net/source/1662193?

?

??一. 認識REST

???????? REST軟件架構是由Roy Thomas Fielding博士在2000年首次提出的。他為我們描繪了開發基于互聯網的網絡軟件的藍圖。REST軟件架構是一個抽象的概念,是一種為了實現這一互聯網的超媒體分布式系統的行動指南。利用不論什么的技術都能夠實現這樣的理念。而實現這一軟件架構最著名的就是HTTP協議。通常我們把REST也寫作為REST/HTTP,在實際中往往把REST理解為基于HTTPREST軟件架構,或者更進一步把RESTHTTP看作為等同的概念。

???? 很多其它請閱讀:

http://www.infoq.com/cn/articles/rest-architecure

http://www.kuqin.com/system-analysis/20080515/8518.html

???

?????? REST 的請求流程示意圖

???????

?

個人總結:

1.?????? REST架構僅僅是一種思想,并沒有限定不論什么技術,不論什么語言。

2.?????? REST的本質就是HTTP調用,用于減少各個應用之間的耦合度。

3.?????? 良好的REST 架構,應該有統一的表示方式和數據格式,可以有效的把各種資源組織起來,并可以進行有效的控制。

?

二. 實現REST架構

?

?

1.框架設計

?

2.接口的定義

?

IRestRequest : 用來表示 REST請求

IRestResponse:用來表示 REST響應

IRestInterceptor:用來表示REST攔截器

???????????????? RestException: 用來表示REST異常

?

?

3.實現的主要代碼

?

??? 初始化代碼,借助Servlet的init

?

@Override public void init(ServletConfig config) throws ServletException { //1.從init里載入對應的Rest服務,假設是有Spring框架或者別的,原理都一樣 String serviceClass = config.getInitParameter("service-class"); if (serviceClass != null) { System.out.println("Rest服務:" + serviceClass); String[] classes = serviceClass.split(","); try { for (String className : classes) { Class newClass = Class.forName(className); Object newObject = newClass.newInstance(); if (newObject instanceof IRestService) { IRestService restService = (IRestService) newObject; services.put(restService.getURI(), restService); System.out.println("載入Rest服務:" + newObject.getClass().getName() + ",URI=" + restService.getURI()); } } } catch (Exception e) { System.out.println("載入Rest服務出錯:" + e.getMessage()); } } //2.載入攔截器 String interceptorClas = config.getInitParameter("interceptor-class"); if (interceptorClas != null) { System.out.println("攔截器:" + serviceClass); String[] classes = interceptorClas.split(","); try { for (String className : classes) { Class newClass = Class.forName(className); Object newObject = newClass.newInstance(); if (newObject instanceof IRestInterceptor) { IRestInterceptor interceptor = (IRestInterceptor) newObject; interceptors.add(interceptor); System.out.println("載入Rest攔截器:" + newObject.getClass().getName()); } } } catch (Exception e) { System.out.println("載入Rest攔截器出錯:" + e.getMessage()); } }

??? 轉發實現

@Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //處理HTTP請求 response.setContentType("text/html;charset=GBK"); response.setCharacterEncoding("GBK"); Response returnResponse = new Response(); //終于返回的結果,能夠是JSON或者XML格式 try { //1.獲得請求的URI String uri = request.getRequestURI(); //System.out.println("URI===="+uri); //2.獲得對應的RestService IRestService service = services.get(uri); if (service != null) { //2.0 校驗service是否符合當前環境 //-------------- //2.1 構造對應的 request 和 response 上下文 GenericRestRequest restRequest = new GenericRestRequest(request); GenericRestResponse restResponse = new GenericRestResponse(response); //2.2 填充環境變量之類 restRequest.setRestService(service); restResponse.setRestService(service); //2.3 運行攔截器 for (IRestInterceptor interceptor : interceptors) { interceptor.handleRest(restRequest, restResponse); } //2.4 運行服務 service.service(restRequest, restResponse); //2.5 if (restResponse.getResponseData() != null) { returnResponse = restResponse.getResponseData(); } } else { throw new Exception("未找到相應的Rest服務:" + uri); } } catch (Exception e) { e.printStackTrace(); returnResponse.addError("doAction", e.getMessage()); } response.getWriter().write(returnResponse.toJSON()); }

?

?

??? 原型源代碼下載:http://download.csdn.net/source/1662193

?

?

三. 數據格式

?

?先看看曾經寫的一篇文章: http://blog.csdn.net/maoxiang/archive/2008/06/25/2584282.aspx? 《改善Form提交數據的 UI 交互設計?》

?

? 數據格式定義例如以下:

?

JSON 格式:

{

?code: 200|302|403|500 , 200表示正常,302表示跳轉,403表示須要驗證碼,500異常

?messages:{? //傳遞的數據

?[key:value]

}

XML格式:

<response>

? <code>200|302|403|500</code>

? <messages>

???? <key></key>

???? <value></value>

?</messages>

</response>

?

舉例說明:

{"code":200,"error":false,"messages":{"list":[{"name":"user0"},{"name":"user1"},{"name":"user2"},{"name":"user3"},{"name":"user4"}]},"ok":true,"redirect":false,"verify":false,"version":2}

?

採用javascript 來解析JSON格式就相對簡單非常多了:

?

if (data.code==200){ //假設是成功返回 var users= data.messages.list; //這個由rest服務返回 var html="以ol方式顯示數據:<br/><ol>” for(var i=0;i<users.length;i++){ html+="<li>"+users[i].name+"</li>"; } html+="</ol>"; $("#idResult").html(html); }else{ //出錯了,或者別的 alert(data.messages.doAction); }

?

?

四. 實際應用

1. 太平洋女性網搜店系統 http://shop.pclady.com.cn

2. 太平洋女性網曬客系統 http://blog.pclady.com.cn

3. 太平洋女性網化妝品庫 http://cosme.pclady.com.cn

?.....

?

?

?

總結

以上是生活随笔為你收集整理的简单的REST的框架实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。