車流量 Restful API

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

RESTful是什麼

RESTful,是目前最為流行的一種互連網軟體架構。因為它結構清晰、符合標準、易於理解、擴充方便,所以正得到越來越多網站的採用。學習RESTful,首先要學習REST。

REST

  • 資源(Resources) REST是"表現層狀態轉化",其實REST省略了主語。"表現層"其實指的是"資源"的"表現層"。一張圖片、一個文檔、一個視頻等。這些資源我們通過URI來定位,也就是一個URI表示一個資源。

  • 表現層(Representation)
    資源是做一個具體的實體資訊,他可以有多種的展現方式。例如一個txt文本資訊,他可以輸出成html、json、xml等格式,一個圖片他可以jpg、png等方式展現
    URI確定一個資源,但是如何確定它的具體表現形式呢?應該在HTTP請求的頭資訊中用Accept和Content-Type欄位指定,這兩個欄位才是對"表現層"的描述。

  • 狀態轉化(State Transfer)
    訪問一個網站,就代表了用戶端和伺服器的一個互動過程。在這個過程中,肯定涉及到資料和狀態的變化。而HTTP協議是無狀態的,那麼這些狀態肯定儲存在伺服器端,所以如果用戶端想要通知伺服器端改變資料和狀態的變化,肯定要通過HTTP來通知它。具體來說,就是HTTP協議裡面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:GET用來擷取資源,POST用來建立資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源。

    RESTful API

    符合REST設計風格的Web API稱為RESTful API。也就是說,RESTful是REST架構風格在WEB上的應用

    實現功能

  • 訪問所有車流量資料
    GET: /api/<Authen>/all

  • 訪問近一周車流量資料
    GET: /api/<Authen>/near

  • 訪問指定路口(crossID)即指定網關所有車流量資料
    GET: /api/<Authen>/cross/<crossID>

  • 訪問指定路口(crossID)即指定網關近3分鐘即時車流量資料
    GET: /api/<Authen>/cross/<crossID>/last3min

  • 訪問指定路口(crossID)即指定網關一段時間車流量資料
    GET: /api/<Authen>/cross/<crossID>/start=<startTime>&end=<endTime>

    代碼部分

  • 資料庫部分Flow.js
    建立Schema:建立

    var FlowSchema = new Schema({ CrossTrafficData:{     CrossID: String,     DeviceType: String,     DateTime: String,     Interval: Number,     DataList:{         Data:{             LaneNo: String,             Volume: Number,             AvgOccupancy: Number,             AvgHeadTime: Number,             AvgLength: Number,             AvgSpeed: Number,             Saturation: Number,             Density: Number,             Pcu: Number,             AveQueueLength: Number,             Volume1: Number,             Volume2: Number,             Volume3: Number,             Volume4: Number,             Volume5: Number         }     } }   });

    //exports對象:
    var FlowOp = function(){};
    //定義各種函數。prototype表示是給FlowOp對象用的,通過callback返回資料
    FlowOp.prototype.<name_function> = function([parametres],callback){}
    //定義一個Model對象方便使用Model封裝的方法
    var FlowModel = mongodb.mongoose.model('flowCar',FlowSchema);
    //Model對象的find方法,參數:條件,投射,CB
    //下面這句表示篩選出參數id值和時間段的檔案,並且提取後去除_id和__v屬性。查詢結果返回給data_id_p,進入回呼函數

    FlowModel.find({'CrossTrafficData.CrossID': id,'CrossTrafficData.DateTime': {"$gt": start, "$lte": end}},'-_id -__v',(err,data_id_p)=>{});

    //回呼函數,將js的obj轉換為json,然後給callback賦值,傳遞json數值

    var data_p_json= JSON.stringify({data_p});callback(err,data_p_json);
  • 路由routedata.js
    //Json轉XML,藉助jsontoxml包並加入xml聲明,之前傳遞的json就是obj

    router.get('/cross/:id/start=:timestart&end=:timeend', (req, res) => { CarFlow.findByCrossByPeriod(req.params.id, req.params.timestart, req.params.timeend, (err, obj) => {     var data_xml = jsontoxml(obj);     res.set('Content-Type', 'text/xml');     var d = '<?xml version="1.0" encoding="utf-8"?>';     res.send(d + data_xml); });});

    反思

    可以在Schema建立函數,並且匯出一個Model對象是否封裝更好?

    mySchema.methods.findByCByP = function(paras, cb){ return this.find({type: this.type}, cb);}

    Reference

    Rest:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/08.3.md

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.