導航:首頁 > 編程語言 > phprestapi實例

phprestapi實例

發布時間:2022-10-01 10:46:58

⑴ 如何更好地設計REST API

由於REST可以降低開發的復雜度,提高系統的可伸縮性,增強系統的可擴展性,簡化應用系統之間的集成,因而得到了廣大開發人員的喜愛,同時得到了業界廣泛的支持。比如IBM,Google等公司的很多產品都提供了REST API給開發人員;與此同時,大量的開源項目和雲計算服務都提供了REST API介面。

而在最近,一些新產品的開發甚至已經幾乎完全拋棄了傳統的類似JSP的技術, 轉而大量使用REST風格的構架設計, 即在伺服器端所有商業邏輯都以REST API的方式暴露給客戶端, 所有瀏覽器用戶界面使用widget、Ajax、HTML5 等技術,用HTTP的方式與後台直接交互。

那麼, 在REST API爆炸式增長的今天, 我們應該如何更好的設計我們的介面, 來提高我們的API的可用性,易用性,可維護性與可擴展性呢?本文將從以下方面與您探討REST API設計方面的最佳實踐:

如何規劃資源標識結構與URI模式
如何根據應用場景提供內容協商
如何正確的使用HTTP響應代碼
如何處理緩存和並發請求
如何利用數據冗餘和鏈接元素
先決條件

如果您具有如下知識與經驗,將有助於您閱讀和理解本文章的內容 。

REST相關的基本知識;
HTTP協議的基本知識;
一定的Web開發經驗。
REST簡介

REST是英文Representational State Transfer的縮寫,是近年來迅速興起的,一種基於HTTP、URI以及XML這些現有協議與標準的,針對網路應用的設計和開發方式。它可以降低開發的復雜度,提高系統的可伸縮性。

REST的核心是可編輯的資源及其集合,用符合Atom文檔標準的Feed和Entry表示。每個資源或者集合有一個惟一的URI。系統以資源為中心,構建並提供一系列的Web服務。REST的基本概念和原則包括:系統上的所有事物都被抽象為資源;每個資源對應唯一的資源標識;對資源的操作不會改變資源標識本身;所有的操作都是無狀態的;等等。

在REST中,開發人員顯式地使用HTTP方法,對系統資源進行創建、讀取、更新和刪除的操作:

使用POST方法在伺服器上創建資源
使用GET方法從伺服器檢索某個資源或者資源集合
使用PUT方法對伺服器的現有資源進行更新
使用DELETE方法刪除伺服器的某個資源

圖 1. 用 HTTP 方法操作相冊系統資源的簡單範例

更好的規劃你的資源標識結構與URI模式

REST 中,最基本的莫過於資源標識結構和URI模式了。更好的規劃他們,是我們的API設計取得成功的最關鍵的一步。

首先,我們來看看基本資源類型

上文中提到,在REST構架的設計中,系統中的所有事物都被抽象為資源。

在一個文檔系統中,文檔、目錄、注釋、草稿等等,是組成系統的資源。

在一個銀行系統中,客戶信息、理財產品、利率信息、網點信息等等,是組成系統的資源。

在一個航空客票系統中,旅客信息、機票訂單、航班信息、機場信息等等,是組成系統的資源。

這些資源,通常在系統中以「Entry」的形式出現。下面的代碼樣例向您展示了一個常見的「Entry」資源。

清單 1. 一個簡單的Entry資源樣例

以下是引用片段:
REST API 請求:
GET http://example.com/航班信息/CA827/entry
<entry>
<id> CA827 </id>
<link href="航班信息 /CA827/entry" rel="self"/>
<title type="text">CA827 </title>
<published>2010-08-24T02:35:40.937Z </published>
<updated>2010-08-24T02:35:40.937Z </updated>
<ca:from>Beijing </ca:from>
<ca:to>Changsha </ca:to>
<ca:time>09:30:00 </ca:time>
<ca:aircraft>AB330 </ca:aircraft>
<summary type="text"/>
</entry>

我們會注意到,這些資源,在描述了某種事物的同時,還有可能存在一定的層次結構關系。比如,文檔從屬於某個目錄,注釋從屬於文檔;旅客信息可以從屬於機票訂單,也可以從屬於某個航班。

當我們的資源有這種層次關系的時候,我們不妨在URI模式的設計中,用復合的URI來幫助開發者更好的理解和設計資源。

比如, 針對一個文檔的評論, 他的URI模式可以設計成如下:/文件夾/[文件夾名]/文件/[文件名]/評論/[ 評論唯一標示 ]。 這樣,在構造和解析URI的過程中, 可以幫助開發者更好的理解系統,設計程序。

其次,我們來看看集合資源類型

資源,除了作為獨立個體可以被訪問,還可以由多個個體組合成一個集合,在系統中,通常以「feed」的形式存在。資源的集合, 可以是處於相同層次上,有相同從屬關系的一組資源,比如一個文件夾下的所有文件; 也可以是根據某種條件查詢出來的查詢結果的資源集合,比如所有30歲以上40歲以下,擁有100萬資產以上客戶的名單。

下面,我們來討論一下設計集合類型資源的REST API時需要考慮的問題。

使用過濾條件來幫助用戶更准確地獲取數據

我們要返回的資源集合,無論是否有相同從屬關系,大部分時候都需要進行必要的過濾,提供足夠的過濾參數,查詢參數, 能夠幫助開發者高效的,准確地獲取所需要的數據。 在伺服器端過濾數據通常比客戶端高效,並且減少了不必要的數據傳輸,可以大大減少網路開銷,提高執行效率。

最常見的過濾條件,是通過URL參數實現,比如/環境工程系/學生? 籍貫=北京&性別=女。

很多時候,我們需要制定更加復雜的過濾條件,那麼我們可以有兩種選擇:

首先,我們可以使用正則表達式或者伺服器可以理解的語法,比如/環境工程系/學生?filter=age between (15, 18)

其次,我們還可以使用POST方法,攜帶一個文件來描述復雜的查詢條件,文件的格式與語法通常需要在伺服器端有相應的設計與定義。不過通常POST方法沒有緩存機制,因此不是查詢數據的首選。

使用排序來幫助客戶端更好的展現數據

雖然進行客戶端排序對於開發者來說是件輕而易舉的事情,但是直接得到已經排序的返回結果,仍然是大部分開發者所期望的。尤其是很多時候,我們在瀏覽器,使用 Widget 展示結果,不適宜在客戶端存儲大量數據進行內存排序。

排序, 通常有2個參數,一個是用來排序的欄位,一個是排序的升序降續方式。比如我們可以用支持這樣的參數組合的手段,提供基本的排序能力:?sortOrder=asc&sortField=age

使用分頁來幫助客戶端處理大量數據

由於返回的結果可能有幾百幾千條記錄,將這些記錄一次性的返回給客戶端是不現實的,巨大的網路流量開銷和客戶端數據區的內存開銷,都是我們在應用開發的時候不希望看到的,因此,如果你的集合資源有可能有大量的數據返回,請務必提供分頁的功能支持。

我們通常用一個以上參數來制定一個返回結果的區域,比較常見的有下面兩種:

一種常見於用固定行數的表格來展示數據,用當前處於第幾頁和每頁返回多少行數據來確定需要的數據, 比如/所有學生?page=5&pagesize=50

另外一種常見於用更加靈活的界面展示數據,用從第幾行開始,一共返回多少行數據來確定需要的數據, 比如/所有學生?startIndex=27&count=22

下面是一個來自IBM developerWorks的API樣例,嘗試請求該API,你可以看到該集合很好的支持了結果的分頁與排序。同時我們從返回的信息中可以看到,每個文檔Entry的URI都按照/社區庫/[社區庫ID]/文檔/[文檔ID]的復合URI的模式設計的。

清單 2. IBM developerWorks的某個社區文件庫的集合資源的API

以下是引用片段:
REST API 請求:
GET https://www.ibm.com/developerworks/mydeveloperworks
/files/form/anonymous/api/communitylibrary
/0a7c97bb-6cf9-4ddb-a918-80994e7b444d/feed?
pageSize=5&page=1&sK=modified&sO=dsc

最後,我們來討論一些特殊資源類型

理想的REST世界,一切事物都抽象為資源,一切操作都抽象為增刪改查。然而,所有事物與操作都可以很容易的按照這個規則作抽象嗎?讓我們看看這個例子:

檢入和檢出一個文檔----這個時候,我們要處理的資源是一個文檔,然而增刪改查似乎都無法與「檢入檢出」這個動作進行對應。當然,我們可以在文檔資源中,設計一個檢入檢出狀態的元素,通過編輯文檔資源來實現。但是,這種設計從自然語義上看,並不是很貼切;並且增加了資源編輯操作的復雜度。

如果我們來定義一個新的集合----「我檢出的文檔」,用創建一個集合資源來對應檢出(創建一個文檔鎖),用刪除一個集合資源來對應檢入(刪除一個文檔鎖), 是不是邏輯上可以變得更加清楚?

在REST這個以名詞為核心的構架結構中,當你遇到一些動詞特性比較強的操作,而又很難用原始資源的增刪改查來匹配的時候,不妨換個思路, 通過引入新的邏輯資源集合的方式, 來進行API的設計與規劃。

理解和使用內容協商

我們的開發者在發送一個REST API請求的同時,根據應用場景,針對相同的資源,可能會期待不同的返回形式。

比如,我希望根據用戶客戶端語言,同一個資源的內容可以返回不同的語言。又比如,當我使用Java編程的時候,我希望得到ATOM格式的返回結果,而當我使用JavaScript編程的時候,我希望得到Json格式的返回結果。

因此,我們在設計REST API的時候,應該提供完備的內容協商能力。

使用URL參數進行內容協商

最容易想到的自然是通過URL參數進行控制,我們經常看到形如/航班號/entry? format=JSON這樣的URL。這種方式的優勢就是簡單靈活, 你可以通過任何 URL 參數來組合你的輸出格式。

下面是一個來自IBM developerWorks的API樣例,嘗試請求該API,你可以看到該集合是如何支持不同的輸出格式請求的。

清單 3. IBM developerWorks的文件服務標簽雲的API

以下是引用片段:
REST API請求,要求返回XML格式數據:
GET https://www.ibm.com/developerworks/mydeveloperworks
/files/form/anonymous/api/tags/feed?format=xml
&scope=document&pageSize=30&sK=cloud&sO=dsc
REST API請求,要求返回JSON格式數據:
GET https://www.ibm.com/developerworks/mydeveloperworks
/files/form/anonymous/api/tags/feed?format=json
&scope=document&pageSize=30&sK=cloud&sO=dsc

使用Accept頭進行內容協商

使用URL參數,簡單靈活,但是也由此帶來了設計上的隨意和不標准。並且,過多的參數會導致URL的可讀性變差,更有甚者,可能會導致URL過長,超出規范,API請求無法執行。

更為標準的內容協商方式是使用HTTP頭。我們通常使用Accept來設置我們接受的返回結果的內容格式,用Accept-Charset來設置字元集,用Accept-Encoding來設置數據傳輸格式,用Accept-Language來設置語言。

使用URI模式進行內容協商

還有一種模式,就是將協商設置直接作為URI的一部分,將不同的返回視為不同的資源,比如/航班號/json來返回JSON格式的結果,用/航班號/atom來返回ATOM格式的結果。

正確的使用HTTP響應代碼

作為API的設計者,正確的將API執行結果和失敗原因用清晰簡潔的方式傳達給客戶程序是十分關鍵的一步。 我們確實可以在HTTP的相應內容中描述是否成功,如果出錯是因為什麼, 然而, 這就意味著用戶需要進行內容解析,才知道執行結果和錯誤原因。因此,HTTP響應代碼可以保證客戶端在第一時間用最高效的方式獲知API運行結果,並採取相應動作。

轉載,僅供參考,祝你愉快,滿意請採納。

php怎麼開發rest api

「表面看來,良好的REST API很簡單,即使後端很復雜,」 Hazlewood在一次采訪說到。一個 API 關注一系列的東西,以及如何表現個人的東西。減少API集合,搜索所有書籍和出版刊物,你會發現一個簡潔的解決方案,它很直觀,且不是太復雜。

⑶ 什麼是REST API請解釋的通俗一點,它和一般的API有什麼區別

REST API是一組關於如何構建Web應用程序API的架構規則、標准或指導,REST API遵循API原則的架構風格。REST是專門針對Web應用程序而設計的,其目的在於降低開發的復雜度,提高系統的可伸縮性。

REST API和一般的API區別為:包含不同、資源不同、狀態不同。

一、包含不同

1、REST API:REST API 是API的子集;所有的REST API都是API。

2、一般的API:一般的API的為。API是REST API的超集,不是所有的API都是REST API。

二、資源不同

1、REST API:在REST API架構中,每一個資源都有與之對應的唯一資源標識符(resource identifier),當資源的狀態發生改變時,資源標識符不會發生改變。

2、一般的API:一般的API架構中,Web中所有的事物(文本、音頻、視頻、圖片、鏈接)被統一的抽象為資源(resource)。當資源的狀態發生改變時,資源標識符會發生改變。

三、狀態不同

1、REST API:在REST架構中,所有的操作都是無狀態的。REST架構不遵循CRUD原則。

2、一般的API:一般的API架構中,所有的操作都是有狀態的。遵循CRUD原則,所有的資源都可以通過GET、POST、PUT和DELETE這四種行為完成對應的操作。

⑷ 怎麼用PHP開發API供其他客戶端調用

一、介面的分類:

1、URL類型的介面
URL
路由帶參數式的介面!這個很好做!只要有過Web開發經驗的人都能完成!這種介面數據不夠隱蔽性,可以直接在瀏覽其中看到,如支付寶的交易請求URL。需
要加一個MD5簽名,和伺服器端的再次向支付寶伺服器發送驗證!雖然soap方式傳遞的數據隱蔽性很好!但為了數據安全,難免也需要進行數據簽名。

2、SOAP類型的介面
無關編程語言、無關平台、擴展性很好,要實現一個SOAP 型的介面,有兩種方式:一種有WSDL文件方式、一中無WSDL文件方式!

於熱愛研究型的人來說,使用第一種方式可以讓你清楚的了解PHP是怎麼創建了一個Web
Service!但第一種對於新手來說,創建一個XML格式的WSDL文件,是比較難的,這你的先了解熟悉什麼是XML!學會XML語法!但對於一個急於
解決問題的人來說!沒有這么多的時間去熟悉!所以這是件煩惱的事!

二、PHP環境設置
先配置下PHP的soap環境支持:
找到php.ini文件
;extension=php_soap.dll
刪除掉";" ,重啟apache伺服器
為了便於測試,需要關於wsdl緩存
方式1:
配置文件:php.ini 選項 soap.wsdl_cache_enabled 設置為0
方式2:
代碼頭添加:ini_set('soap.wsdl_cache_enabled', "0"); //關閉wsdl緩存

三、有WSDL文件方式創建

這里先介紹標準的webservice。 那麼如何創建wsdl呢?對於PHP來說這確實是件很不容易的事情,有人說用zend
studio創建很方便,這是一種方法。但對於那些不喜歡用zend studio的人來說,會覺得創建一個web service還要安裝zend
studio,太強人所難了。
在這里介紹一個簡單的方法,到網上下載SoapDiscovery.class.php類,裡面有個公用方法:getWSDL,這個方法末尾是用的 return,那麼,你修改一下這個方法:
//return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>');
//生成wsdl文件,將上面的return注釋
$fso = fopen($this->class_name . ".wsdl" , "w");
fwrite($fso,
sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL,
$serviceWSDL, $messageWSDL, '</definitions>'));
現在生成wsdl的類有了,SoapDiscovery.class.php(源碼在最末尾)。

再准備一個提供服務的Service.php類文件或者函數就可以創建wsdl了!

⑸ PHP網站提供API服務

網站上的API介面就是在別的網站上使用一組代碼,調用提供介面網站的內容,如一個普通的iframe嵌入式框架代碼可以顯示一個網站提供的工具,別的網站通過添加這個代碼,就可以在自己的網站上使用顯示這個工具,如http://www.into123.cn

⑹ php根據經緯度獲取地理位置

這種功能,只能調用第三方的介面了,網路地圖API就有這個介面addressComponents,逆地址解析,參考方法如下:

<GeocoderSearchResponse>

<status>OK</status>

<result>

<location>

<lat>38.990998</lat>

<lng>103.645966</lng>

</location>

<formatted_address>甘肅省武威市民勤縣</formatted_address>

<business/>

<addressComponent>

<streetNumber/>

<street/>

<district>民勤縣</district>

<city>武威市</city>

<province>甘肅省</province>

</addressComponent>

<cityCode>118</cityCode>

</result>

</GeocoderSearchResponse>

⑺ 求php實現rest的api原理(json)

簡單說就是利用curl或者fsocket等函數封裝http請求,並將對應response抓取回來後再處理

⑻ 什麼是API介面,PHP開發API介面的例子

就是php只處理數據,而不直接輸出html


把視圖層都交給js去完成。


比如:

//獲取數據
$id=$_GET['id'];
if($id){
//支資料庫取數據
$sql="select*fromtablewhereid='".$id."'";
$re=.....;
echojson_encode($re);//返回json格式數據給前端處理
}

//修改數據
if($id&&$_GET['edit']){
////資料庫操作
echo"修改成功";
}

⑼ 求助大神,php api介面怎麼寫

可以寫個interface 讓別人來實現介面的方法就行了。
任何網頁都可以是介面,為了方便數據解析一般都用json和xml響應

閱讀全文

與phprestapi實例相關的資料

熱點內容
電影殺手為小男孩改名叫林默 瀏覽:371
現代道士電影 瀏覽:263
tcltkpdf 瀏覽:309
台灣四級論理電影 瀏覽:578
以肉為主yy小說txt下載 瀏覽:727
俄羅斯穿越電影 瀏覽:485
韓國《奇怪的美發沙龍》中文 瀏覽:137
建行app怎麼調成日間模式 瀏覽:666
穿越皇帝當種馬 瀏覽:48
程序員和對象關系不清楚 瀏覽:133
能編輯文件夾的程序 瀏覽:981
國產劇情中國大胸女孩 瀏覽:761
滅門慘案哪三部 瀏覽:1002
蝴蝶gl電影 瀏覽:848
主角叫陸離的小說 瀏覽:99
大寸度電影全裸帶毛 瀏覽:292
韓國一個女的彈鋼琴什麼電影 瀏覽:828
實現伺服器上文件如何下載到本地 瀏覽:268
日本大電影什麼意思 瀏覽:859