欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

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

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

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

  可以考慮將一個(gè) RESTful JSON 控制器放置到您的項目中,將它用作一個(gè)虛擬交通警察,負責發(fā)送請求并接收來(lái)自您的數據源的響應。本文將介紹 REST 和 JSON 的基礎知識,并展示一種建立控制器的方法。其結果是從一個(gè)數據源檢索數據的簡(jiǎn)單方法,檢索的數據采用標準化的格式,可以使用 PHP 或 JavaScript 代碼輕松解析。

  什么是 REST?

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

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

  例如,如果您想檢索數據,則使用 GET 請求;要創(chuàng )建數據,則使用 POST 請求;要更新數據,則使用 PUT 請求;最后,要刪除數據,則使用 DELETE 請求。

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

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

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

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

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

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

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

  什么是 JSON?

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

$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
}
*/

  注意,一個(gè) SQL 查詢(xún)(其中鍵等于數據庫字段名、值等于數據)生成的典型 PHP 數組可以作為一個(gè) JSON 對象輕松傳輸。到達時(shí),數據可以簡(jiǎn)單地使用 JavaScript 代碼(例如,來(lái)自一個(gè) Ajax 上下文中)來(lái)進(jìn)行 eval(),或者使用 PHP 中的 json_decode() 解碼,重新變?yōu)閿祿到M。

  JSON 支持除對象之外的各種數據類(lèi)型:字符串、空值、數字(整數或實(shí)數)、布爾值和數組(包含在方括號中的逗號分隔的值序列)。因此,JSON 用戶(hù)在處理數據時(shí)體驗到了巨大的靈活性。

  本文將幫助您構建一個(gè)微型列表 JSON REST 控制器,您可以將其放置到您的模型和視圖功能之間。構建完成后,您可以隨意進(jìn)行擴展以適應您的項目目標。

  構建一個(gè)基本 JSON 控制器

  想象一個(gè)提供事件信息的應用程序。所有事件信息都是公共的,因此身份驗證問(wèn)題不是這里的主要考慮。另外,這個(gè)應用程序的目標是查詢(xún)今天發(fā)生的事件,并使用 JSON 將響應傳輸回請求發(fā)起者?,F在,假定請求者是一個(gè) PHP 視圖頁(yè)面。

  首先創(chuàng )建一個(gè)簡(jiǎn)單的事件數據庫架構,類(lèi)似于 清單 2 中的架構。
  清單 2. 數據庫架構(MySQL)

CREATE TABLE `events` (
`id`
INT NOT NULL AUTO_INCREMENT PRIMARYKEY ,
`title`
VARCHAR( 255 ) NOT NULL ,
`address`
VARCHAR( 255 ) NOT NULL ,
`start_time`
DATETIME NOT NULL ,
`description`
TEXT NOT NULL
);

  一旦數據庫表開(kāi)始發(fā)揮作用,輸入幾條模擬數據記錄。確保至少有一天擁有多個(gè)為其安排的條目。接下來(lái),創(chuàng )建一個(gè)典型 PHP 模型文件,它連接到這個(gè)數據庫并使用一個(gè) SQL 查詢(xún)來(lái)識別事件。如果這是一個(gè)真實(shí)應用程序,您可能會(huì )分隔數據庫連接腳本和其余部分,并在您的查詢(xún)中進(jìn)行各種數據驗證。您的代碼可能如清單 3 所示。
  清單 3. 一個(gè)簡(jiǎn)單查詢(xún)

$SERVER = 'name';
$USER
= 'username';
$PASS
= 'pw';
$DATABASE
= 'dbname';

if (!($mylink = mysql_connect($SERVER, $USER, $PASS)))
{
echo
"Sorry, could not connect to DB. Contact your sysadmin for help!";
exit;
}
mysql_select_db( $DATABASE );

class Events{
function get_events($day){
$ret_array
= array();
$sql
="select id,title,address,start_time,description
from events where start_time like '$day%'
order by start_time asc
";
$result = mysql_query($sql);

while($data = mysql_fetch_object($result)){
$obj[
'id'] = $data->id;
$obj[
'title'] = $data->title;
$obj[
'address'] = $data->address;
$obj[
'start_time'] = $data->start_time;
$obj[
'description'] = $data->description;

$ret_array[]
= $obj;
}
return $ret_array;
}
}

  當您使用您知道將檢索到一些事件的日期設置對這個(gè)函數的一個(gè)簡(jiǎn)單調用時(shí),您將得到如清單 4 所示的結果。
  清單 4. 運行查詢(xún)的結果

$EVENT = new Events;
$today
= '2010-06-17';
$events
= $EVENT->get_events($today);
print_r($events);
/* results in
Array
(
[0] => Array
(
[id] => 2
[title] => Event #2
[address] => 156 My Avenue, MyTown, USA 78727
[start_time] => 2010-06-17 11:30:00
[description] => Join us for lunch to hear
FABULOUS SPEAKER.
)

[1] => Array
(
[id] => 1
[title] => Event #1
[address] => 123 My Street, Anytown USA 78727
[start_time] => 2010-06-17 15:30:00
[description] => A great event! Hope to see you there!
)

)
*/

  如果您通過(guò) json_encode() 運行相同的代碼,您將得到一個(gè)可移植的 JSON 對象(如 清單 5 所示)。
  清單 5. JSON 數據對象

[
{
"id":"2",
"title":"Event #2",
"address":"156 My Avenue, MyTown, USA 78727",
"start_time":"2010-06-17 11:30:00",
"description":"Join us for lunch to hear FABULOUS SPEAKER. "
},
{
"id":"1",
"title":"Event #1",
"address":"123 My Street, Anytown USA 78727",
"start_time":"2010-06-17 15:30:00",
"description":"A great event! Hope to see you there!"
}
]

  您的目標是構建這樣一個(gè)簡(jiǎn)單的控制器:它知道應該運行哪個(gè)模型和函數,然后返回一個(gè) JSON 對象作為響應,這個(gè)響應可用于事務(wù)的遠端。這個(gè)控制器非常簡(jiǎn)單,看起來(lái)如清單 6 所示。將清單 6 中的所有代碼粘貼到一個(gè)名為 json.php 的文件中。
  清單 6. 一個(gè)簡(jiǎn)單的控制器

class JSON{
var $response
= '';
function JSON($model,$function,$params){
$REQUEST
= new $model;
$data
= $REQUEST->$function($params);
$
this->response = json_encode($data);
}
}

  要使這段代碼生效,就需要用到您想調用的模型,實(shí)例化 JSON 類(lèi),然后傳入 3 個(gè)參數:模型的類(lèi)名、要運行的函數、以及該函數的參數。這個(gè)類(lèi)然后調用那個(gè)函數并獲取一個(gè)響應,該響應通過(guò) json_encode() 運行。

  最后一步是創(chuàng )建包含對 JSON 數據的請求的文件。這個(gè)特殊的文件(您可以稱(chēng)之為 listing.php)可以設置為接收 3 個(gè) GET 變量(模型、函數和參數各一個(gè)),然后將這些變量傳遞給 JSON 類(lèi)(如清單 7 所示)。
  清單 7. 請求代碼

//this is the code that contains the model
require 'events.php';

//this is the JSON controller
require 'json.php';

//pass in your three GET parameters
$MODEL = $_GET['model'];
$FUNCTION
= $_GET['function'];

//check to see if param is passed in
//if not, use today's date in this instance
if (isset($_GET['param'])){
$PARAM
= $_GET['param'];
}
else{
$PARAM
= date("Y-m-d");
}
//invoke
$JSON = new JSON($MODEL,$FUNCTION,$PARAM);

//access the response variable
echo $JSON->response;

  此時(shí),您可以將這個(gè)文件加載到一個(gè)瀏覽器中,并獲取一個(gè)類(lèi)似于清單 5 的 JSON 對象。您可以通過(guò) json_decode() 將這個(gè) JSON 對象發(fā)送回去,使用 JavaScript 代碼處理它,或者讓它保持原樣。

  整個(gè)這個(gè)流程的一個(gè)甚至更好的方法是創(chuàng )建一個(gè)更緊密模擬 RESTful 服務(wù)器的路徑結構。例如,您可以創(chuàng )建一個(gè)名為 events/today 的目錄結構,該結構包含一個(gè)名為 index.php 的文件。通過(guò)將您的瀏覽器指向 /events/today,無(wú)需傳入任何 GET 變量,您就可以基于清單 8 中的代碼取回一個(gè) JSON feed。
  清單 8. /events/today/index.php 中的代碼

require '../../events.php';
require
'../../json.php';
$MODEL
="Events";
$FUNCTION
="get_events";
$PARAM
= date("Y-m-d");
//invoke
$JSON =new JSON($MODEL,$FUNCTION,$PARAM);
echo $JSON
->response;
//prints out
[
{
"id":"3",
"title":"Test Event 3",
"address":"111 Main Street, Austin TX 78727",
"start_time":"2010-06-10 15:15:00",
"description":"Testing 456."
}
]

  結束語(yǔ)

  使用這種方法,您可以為您的視圖和支持的應用程序簡(jiǎn)化一些數據提取要求。開(kāi)發(fā)人員無(wú)需記住底層數據庫的所有細節,相反,他們可以輕松命中 URLs 并接收他們尋找的響應來(lái)繼續他們的工作。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Yii2 advanced版API接口開(kāi)發(fā) 基于RESTful架構的 配置、實(shí)現、測試
PHP 無(wú)數據庫讀寫(xiě)配置文件 | 孟坤博客
C# 應用 - 使用 WepApp 接受 Http 請求
C# 服務(wù)端篇之實(shí)現RestFul Service開(kāi)發(fā)(簡(jiǎn)單實(shí)用)
WEB API系列(一):WEB API的適用場(chǎng)景、第一個(gè)實(shí)例
基于ThinkPHP開(kāi)發(fā)RESTful Web API | Eureka
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久