一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

為您的Web項(xiàng)目構(gòu)建一個(gè)簡(jiǎn)單的JSON控制器

  您的下一個(gè) php/MySQL 項(xiàng)目可能與您最近完成的十幾個(gè)項(xiàng)目類似:建立一個(gè) MySQL 數(shù)據(jù)庫,創(chuàng)建包含 HTML 的 php 視圖,根據(jù)需要添加 JavaScript 代碼和 CSS 文件,連接到數(shù)據(jù)庫,從數(shù)據(jù)庫提取內(nèi)容來填充視圖,等等。如果您熟悉 web 開發(fā),您一定知道分隔功能代碼的好處。例如,您知道要避免直接在視圖中輸入原始 SQL 查詢,不會(huì)在從數(shù)據(jù)庫提取數(shù)據(jù)的函數(shù)或類中混淆 HTML 標(biāo)記。

  但是,有時(shí),您的項(xiàng)目可能擴(kuò)展到您的正常 php/MySQL 舒適水平之外。例如,您可能不僅擁有需要來自一個(gè)數(shù)據(jù)庫的數(shù)據(jù)的常規(guī) web 視圖,還擁有外部應(yīng)用程序(比如 Facebook),甚至還擁有訪問相同數(shù)據(jù)的移動(dòng)設(shè)備(比如智能手機(jī))。

  您可能會(huì)發(fā)現(xiàn)自己身陷這樣一種情況:數(shù)據(jù)庫更改,或者要求您處理某種類型的 XML 存儲(chǔ)庫。在這些情況下,您對(duì) MySQL 的盲目依賴可能會(huì)阻礙您完成項(xiàng)目的工作。

  可以考慮將一個(gè) RESTful JSON 控制器放置到您的項(xiàng)目中,將它用作一個(gè)虛擬交通警察,負(fù)責(zé)發(fā)送請(qǐng)求并接收來自您的數(shù)據(jù)源的響應(yīng)。本文將介紹 REST 和 JSON 的基礎(chǔ)知識(shí),并展示一種建立控制器的方法。其結(jié)果是從一個(gè)數(shù)據(jù)源檢索數(shù)據(jù)的簡(jiǎn)單方法,檢索的數(shù)據(jù)采用標(biāo)準(zhǔn)化的格式,可以使用 phpJavaScript 代碼輕松解析。

  什么是 REST?

  在一個(gè)典型的 REST 架構(gòu)中,一個(gè)客戶機(jī)發(fā)送一個(gè)請(qǐng)求到服務(wù)器服務(wù)器使用請(qǐng)求資源的一個(gè)表示來進(jìn)行響應(yīng)。資源可以是任何信息對(duì)象,比如數(shù)據(jù)庫或文檔,它的表示通常是一個(gè)格式化的文檔(通常是 XML 或 JSON),充當(dāng)它的當(dāng)前或被請(qǐng)求狀態(tài)的一個(gè)快照。

  REST 資源通常使用有意義的 URLs 標(biāo)識(shí),這些 URLs 接受不同的請(qǐng)求動(dòng)詞 GET、POST、PUT 和 DELETE。這些動(dòng)詞有點(diǎn)類似于許多開發(fā)人員都熟悉的 create-retrieve-update-delete (CRUD) 模型。

  例如,如果您想檢索數(shù)據(jù),則使用 GET 請(qǐng)求;要?jiǎng)?chuàng)建數(shù)據(jù),則使用 POST 請(qǐng)求;要更新數(shù)據(jù),則使用 PUT 請(qǐng)求;最后,要?jiǎng)h除數(shù)據(jù),則使用 DELETE 請(qǐng)求。

  另一個(gè)需要考慮的重要因素是響應(yīng)。RESTful 服務(wù)通常在它的響應(yīng)中提供兩個(gè)有意義的組件:響應(yīng)主體本身和一個(gè)狀態(tài)碼。許多 REST 服務(wù)實(shí)際上允許用戶指定一個(gè)響應(yīng)格式(比如 XML、CSV、序列化的 php 對(duì)象或純文本),方法有兩種:一是發(fā)送一個(gè) ACCEPT 參數(shù);二是指定一個(gè)文件擴(kuò)展名(例如,/api/users.xml 或 /api/users.json)。其他 REST 服務(wù)器,比如您將在這里實(shí)現(xiàn)的服務(wù)器,擁有硬編碼的響應(yīng)格式。這些格式同樣可以接受,只要它們已經(jīng)有文檔記載。

  響應(yīng)代碼往往是 HTTP 狀態(tài)碼。這種模式的優(yōu)點(diǎn)是可以使用知名的現(xiàn)有狀態(tài)碼來標(biāo)識(shí)錯(cuò)誤或成功。狀態(tài)碼 201(CREATED)是一個(gè)成功 POST 請(qǐng)求的完美響應(yīng)。錯(cuò)誤碼 500 表明在您所處的這端(服務(wù)端)上發(fā)生了錯(cuò)誤,但錯(cuò)誤碼 400 表明客戶端上出現(xiàn)了失敗(BAD REQUEST)。如果服務(wù)器出現(xiàn)故障,將發(fā)送錯(cuò)誤碼 503(SERVICE UNAVAILABLE)。

  研究一下下面這個(gè)示例:一個(gè)應(yīng)用程序擁有的一個(gè)數(shù)據(jù)源包含一些用戶信息,名、姓、郵件地址、以及Twitter 帳戶。如果您正在設(shè)置一個(gè)典型的 php 應(yīng)用程序,您需要?jiǎng)?chuàng)建一個(gè) mysql_query() 包裝器來使用一個(gè) SQL 查詢從數(shù)據(jù)庫提取一個(gè)清單。您還需要編寫一些 php 代碼,用于調(diào)用那個(gè)函數(shù)并循環(huán)結(jié)果集,以便在應(yīng)用程序視圖中顯示數(shù)據(jù)。

  一個(gè)更簡(jiǎn)單的方法是設(shè)置一個(gè)簡(jiǎn)單的 REST 控制器,該控制器允許一個(gè)針對(duì) /users/list 的、不帶任何參數(shù)的 GET 請(qǐng)求,然后調(diào)用適當(dāng)?shù)臄?shù)據(jù)庫函數(shù)并返回一個(gè) JSON 格式的清單。接下來,您的應(yīng)用程序可以解碼那個(gè) JSON 數(shù)據(jù),以任何必要的方式循環(huán)該數(shù)據(jù),以便顯示數(shù)據(jù)內(nèi)容。

  另外,您可以通過測(cè)試檢查是否有任何參數(shù)被發(fā)送到 /users/list。例如,如果您發(fā)送一個(gè) GET 請(qǐng)求到 /users/list/1,那么響應(yīng)將只包含 ID 為 1 的用戶的細(xì)節(jié)。除 JSON 格式外,您甚至可以允許其他格式,比如 XML、CSV 和的 php 對(duì)象。

  一個(gè) RESTful JSON 控制器對(duì)于您的開發(fā)工作的作用并非僅僅是在視圖和數(shù)據(jù)源之間放置一個(gè)額外的功能層。想想看,您的基本 php 視圖也許不是請(qǐng)求信息的惟一組件。例如,您可能會(huì)使用 jQuery 通過一個(gè) Ajax 接口請(qǐng)求數(shù)據(jù),或者,您的用戶可能會(huì)通過一部智能手機(jī)或一個(gè) Facebook 應(yīng)用程序請(qǐng)求數(shù)據(jù)。

  在這些情況下,一個(gè)接收請(qǐng)求并以一種容易理解(和預(yù)測(cè))的格式提供響應(yīng)的 RESTful 接口可能會(huì)極大地簡(jiǎn)化您的開發(fā)工作。作為負(fù)責(zé) php 視圖(或者甚至 iPhone 應(yīng)用程序)的開發(fā)人員,您可以發(fā)送一些請(qǐng)求到一個(gè) URL 并接收一組預(yù)期響應(yīng)。在 JSON 控制器的另一面,應(yīng)用程序可以被鉤掛(hook)到 MySQL、PostgreSQL、一個(gè) XML 文件存儲(chǔ)庫、或者什么也不掛。

  什么是 JSON?

  JSON 是一種基于文本的輕量級(jí)數(shù)據(jù)交換格式,便于人類和計(jì)算機(jī)輕松理解和使用。在其出現(xiàn)之初,JSON 設(shè)計(jì)用于表示簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)。盡管它最初被視為用于傳輸特定的 JavaScript 友好數(shù)據(jù)的一種方法,但現(xiàn)在幾乎每臺(tái)計(jì)算機(jī)上都有針對(duì)它的解析器。在 php 中,一對(duì)原生 JSON 函數(shù)(json_encode 和 json_decode)將幫助您執(zhí)行大量繁重的提升。只要將一組數(shù)據(jù)(或者甚至一個(gè)簡(jiǎn)單字符串)發(fā)送到 json_encode,一個(gè) JSON 對(duì)象將出現(xiàn)(如 清單 1 所示)。
  清單 1. 一個(gè) php 數(shù)組 vs. 一個(gè) JSON 對(duì)象

$data = array(
'firstname'=>'Tom',
'lastname'=>'Smith',
'age'=>40
);

print_r($data);
/* prints
Array(
[firstname] => Tom
[lastname] => Smith
[age] => 40
)
*/

echo json_encode($data);

/* prints
{ "firstname": "Tom",
"lastname": "Smith",
"age":40
}
*/

it知識(shí)庫為您的Web項(xiàng)目構(gòu)建一個(gè)簡(jiǎn)單的JSON控制器,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产1页| 二区久久国产乱子伦免费精品 | 男人的天堂久久精品激情a 男人进去女人爽免费视频国产 | 女人被狂躁的免费视频网站软件 | 色 在线播放 | 亚洲网站视频在线观看 | 精品视频 九九九 | 色呦呦影院 | 亚洲天堂99 | 在线视频久| 欧美另类杂交a | 国产香蕉一区二区精品视频 | 欧美精品v国产精品v日韩精品 | 福利视频免费看 | 91九色国产 | 91精品宅男在线观看 | 亚洲热在线观看 | 伊人网成人 | 好吊操视频这里只有精品 | 亚洲国产精品线在线观看 | 在线观看国产91 | 韩国三日本三级中文字幕 | 国产精品综合一区二区 | 成人的天堂视频一区二区三区 | 色哟哟www网站 | 日本大臿亚洲香蕉大片 | 一级一级女人18毛片 | 夜色成人免费观看 | 成人网欧美亚洲影视图片 | 亚洲欧洲综合 | 亚洲综合亚洲综合网成人 | 日本久久综合网 | 国产三级毛片 | 国产精品午夜久久 | 丁香婷婷在线观看 | 加勒比精品 | 国产成人黄网址在线视频 | 欧美爱 | www.天天干.com | 网红毛片 | 多多色|