<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-295  評論-26  文章-1  trackbacks-0

    在了解REST API URI設(shè)計的規(guī)則之前,讓我們快速瀏覽一些我們將要討論的術(shù)語。

    URIs

    REST API使用統(tǒng)一資源標識符(URI)來尋址資源。在當今互聯(lián)網(wǎng)上,充斥著各種各樣的URI設(shè)計規(guī)則,既有像//api.example.com/louvre/leonardo-da-vinci/mona-lisa這樣能夠清楚的傳達API資源模型的文章,也有很難理解的文章,例如://api.example.com/68dd0-a9d3-11e0-9f1c-0800200c9a66 ;Tim Berners-Lee在他的“Axioms of Web Architecture”一文中將URI的不透明度總結(jié)成一句話:

    唯一可以使用標識符的是引用對象。在不取消引用時,就不應(yīng)該查看URI字符串的內(nèi)容以獲取其他信息。 
    ——蒂姆·伯納斯 - 李

    客戶端必須遵循Web的鏈接范例,將URI視為不透明標識符。

    REST API設(shè)計人員應(yīng)該在考慮將REST API資源模型傳達給潛在的客戶端開發(fā)者的前提下,創(chuàng)造URI。在這篇文章中,我將嘗試為REST API URI 引入一套設(shè)計規(guī)則

    先跳過規(guī)則,URI的通用語法也適用與本文中的URI。RFC 3986定義了通用URI語法,如下所示:

    URI = scheme “://” authority “/” path [ “?” query ][ “#” fragment ]

    規(guī)則1:URI結(jié)尾不應(yīng)包含(/)

    這是作為URI路徑中處理中最重要的規(guī)則之一,正斜杠(/)不會增加語義值,且可能導(dǎo)致混淆。REST API不允許一個尾部的斜杠,不應(yīng)該將它們包含在提供給客戶端的鏈接的結(jié)尾處。

    許多Web組件和框架將平等對待以下兩個URI: 
    http://api.canvas.com/shapes/ 
    http://api.canvas.com/shapes

    但是,實際上URI中的每個字符都會計入資源的唯一身份的識別中。

    兩個不同的URI映射到兩個不同的資源。如果URI不同,那么資源也是如此,反之亦然。因此,REST API必須生成和傳遞精確的URI,不能容忍任何的客戶端嘗試不精確的資源定位。

    有些API碰到這種情況,可能設(shè)計為讓客戶端重定向到相應(yīng)沒有尾斜杠的URI(也有可能會返回301 - 用來資源重定向)。

    規(guī)則2:正斜杠分隔符(/)必須用來指示層級關(guān)系

    URI的路徑中的正斜杠(/)字符用于指示資源之間的層次關(guān)系。

    例如: 
    (http://api.canvas.com/shapes/polygons/quadrilaterals/squares ;

    規(guī)則3:應(yīng)使用連字符( - )來提高URI的可讀性

    為了使您的URI容易讓人們理解,請使用連字符( - )字符來提高長路徑中名稱的可讀性。在路徑中,應(yīng)該使用連字符代空格連接兩個單詞 。

    例如: 
    http://api.example.com/blogs/guy-levin/posts/this-is-my-first-post

    規(guī)則4:不得在URI中使用下劃線(_)

    一些文本查看器為了區(qū)分強調(diào)URI,常常會在URI下加上下劃線。這樣下劃線(_)字符可能被文本查看器中默認的下劃線部分地遮蔽或完全隱藏。

    為避免這種混淆,請使用連字符( - )而不是下劃線

    規(guī)則5:URI路徑中首選小寫字母

    方便時,URI路徑中首選小寫字母,因為大寫字母有時會導(dǎo)致一些問題。RFC 3986將URI定義為區(qū)分大小寫,但scheme 和 host components除外。

    例如: 
    http://api.example.com/my-folder/my-doc

    HTTP://API.EXAMPLE.COM/my-folder/my-doc 
    這個URI很好。URI格式規(guī)范(RFC 3986)認為該URI與URI#1相同。

    http://api.example.com/My-Folder/my-doc 
    而這個URI與URI 1和2不同,這可能會導(dǎo)致不必要的混淆。

    規(guī)則6:文件擴展名不應(yīng)包含在URI中

    在Web上,(.)字符通常用于分隔URI的文件名和擴展名。 
    REST API不應(yīng)在URI中包含人造文件擴展名,來指示郵件實體的格式。相反,他們應(yīng)該依賴通過Content-Type中的header傳遞media type,來確定如何處理正文的內(nèi)容。

    http://api.college.com/students/3248234/courses/2005/fall.json 
    http://api.college.com/students/3248234/courses/2005/fall

    如上所示:不應(yīng)使用文件擴展名來表示格式。

    應(yīng)鼓勵REST API客戶端使用HTTP提供的格式選擇機制Accept request header。

    為了是鏈接和調(diào)試更簡單,REST API應(yīng)該支持通過查詢參數(shù)來支持媒體類型的選擇。

    規(guī)則7:端點名稱是單數(shù)還是復(fù)數(shù)?

    keep-it-simple的原則在這里同樣適用。雖然一些”語法學(xué)家”會告訴你使用復(fù)數(shù)來描述資源的單個實例是錯誤的,但實際上為了保持URI格式的一致性建議使用復(fù)數(shù)形式。

    本著API提供商更容易實施和API使用者更容易操作的原則,可以不必糾結(jié)一些奇怪的復(fù)數(shù)(person/people,goose/geese)。

    但是應(yīng)該怎么處理層級關(guān)系呢?如果一個關(guān)系只能存在于另一個資源中,RESTful原則就會提供有用的指導(dǎo)。我們來看一下這個例子。學(xué)生有一些課程。這些課程在邏輯上映射到學(xué)生終端,如下所示:

    http://api.college.com/students/3248234/courses - 檢索id為3248234的學(xué)生學(xué)習(xí)的所有課程的清單。 
    http://api.college.com/students/3248234/courses/physics -檢索該學(xué)生的物理課程

    結(jié)論

    當你在設(shè)計REST API服務(wù)時,您必須注意這些由URI定義的資源。

    正在構(gòu)建的服務(wù)中的每個資源將至少有一個URI標識它。這個URI最好是有意義的,且能充分描述資源。URI應(yīng)遵循可預(yù)測的層次結(jié)構(gòu),用來提高其可理解性,可用性:可預(yù)測的意義在于它們是一致的,它的層次結(jié)構(gòu)在數(shù)據(jù)關(guān)系上是有意義的。

    RESTful API是為使用者編寫的。URI的名稱和結(jié)構(gòu)應(yīng)該能夠向使用者傳達更清晰的含義。通過遵循上述規(guī)則,您將創(chuàng)建一個更清晰的的REST API與更友好的客戶端。這些并不是REST的規(guī)則或約束,僅僅是API的增強和補充。

    我也建議你來看看http://blog.restcase.com/5-basic-rest-api-design-guidelines/這篇文章。

    最后,望大家牢記:你在為你的客戶端設(shè)計API URI,而不僅僅是為你的數(shù)據(jù)。



    大盤預(yù)測 國富論
    posted on 2017-06-26 09:50 華夢行 閱讀(227) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 亚洲熟妇无码八AV在线播放| 性做久久久久免费观看| 久久亚洲国产午夜精品理论片 | 久久精品国产亚洲av日韩| 精品国产免费人成网站| 亚洲人成网站色在线入口| 一级特黄色毛片免费看| 亚洲片一区二区三区| 中文无码成人免费视频在线观看| 亚洲精品狼友在线播放| 永久免费AV无码网站国产| 亚洲av福利无码无一区二区| 久久久久久夜精品精品免费啦| 亚洲欧洲第一a在线观看| 亚洲国产精品免费在线观看| 亚洲免费电影网站| 好吊妞788免费视频播放| 精品成人一区二区三区免费视频| 亚洲毛片网址在线观看中文字幕 | 在线看片免费人成视频久网下载| 亚洲av中文无码乱人伦在线播放| 一级毛片在线观看免费| 亚洲另类自拍丝袜第1页| 无码高潮少妇毛多水多水免费| 国产成人亚洲精品91专区高清| 精品亚洲视频在线观看| 一级毛片免费观看| 亚洲爆乳成av人在线视菜奈实| 亚洲午夜爱爱香蕉片| 最好看的中文字幕2019免费| 亚洲中文无码亚洲人成影院| 亚洲无线一二三四区手机| 永久在线免费观看| 国产精品亚洲专区无码WEB| 亚洲色大成网站www永久一区| 国产免费不卡视频| 免费一级毛片在线播放视频免费观看永久| 国产精品亚洲精品日韩已满| 97在线线免费观看视频在线观看| 国产成人自产拍免费视频| 亚洲伊人色一综合网|