程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 搭配修身寫一個RESTful Web服務

搭配修身寫一個RESTful Web服務

編輯:關於PHP編程

要創建一個Hello World應用程序,刪除默認的index.php文件在應用程序目錄,並創建一個新的index.php文件用下面的代碼:

01 <?php
02 require "Slim/Slim.php";
03
04 // create new Slim instance
05 $app = new Slim();
06
07 // add new Route
08 $app->get("/", function () {
09     echo "<h1>Hello Slim World</h1>";
10 });
11
12 // run the Slim app
13 $app->run();

現在是准備你的第一個修身應用。如果你通過浏覽器訪問index.php文件,你應該看到一個大的“Hello斯利姆世界。”
在您的應用程序中使用的Slim,你需要包括Slim.php和斯利姆,會自動加載,它需要的所有其他文件。然後,您可以創建一個或多個實例修身對象,並添加您的路線。
苗條的構造函數接受一個應用程序的配置值的數組。模式,TEMPLATES.PATH和觀看一些重要的,我們經常使用的配置。使用模式設置要像開發或生產,使用的應用環境。TEMPLATES.PATH設置使用模板文件的位置。斯利姆使用Slim_View的,默認情況下,呈現的觀點,但您可以編寫自定義的視圖處理程序,並通過使用附加苗條價值。下面的示例演示如何創建一個新的自定義修身實例TEMPLATES.PATH和設置環境的發展模式。

1 <?php
2 $app = new Slim(array(
3     "MODE" => "development",
4     "TEMPLATES.PATH' => "./templates"
5 ));

創建一個應用程序使用斯利姆是創建路線的最重要組成部分。路由幫助一個URI映射到一個特定的請求方法的回調函數。斯利姆提供一個簡單而直觀的方式,以相同的URI映射的方法不同的要求。它將調用的回調函數,符合當前的URI和請求方法,或產生一個404錯誤,如果它是無法比擬的。加入航線後,你需要調用的run()方法修身實例運行的應用程序。
寫一個圖書館服務
在更深入的運動,讓我們創建一個簡單的圖書館管理Web服務應用程序使用超薄。在此應用中,我們就可以列出,添加,刪除,更新本書詳細介紹了使用Web服務調用。
下表列出了將支持Web服務的端點:
對於數據庫的交互中,我將使用NotORM書面JakubVrána作為替代ORM,它提供了一個簡單而直觀的API來與數據庫中的數據,PHP庫。NotORM使用PHP的PDO擴展來訪問數據庫,所以PDO的實例傳遞給NotORM的構造。

1 <?php
2 require "NotORM.php";
3
4 $pdo = new PDO($dsn, $username, $password);
5 $db = new NotORM($pdo);

上市書籍
第一個端點列出庫中所有的書籍,讓我們的使用超薄創建端點並返回JSON格式的編碼數據。

01 <?php
02 ...
03 $app = new Slim(
04     "MODE" => "developement",
05     "TEMPLATES.PATH' => "./templates"
06 );
07
08 $app->get("/books", function () use ($app, $db) {
09     $books = array();
10     foreach ($db->books() as $book) {
11         $books[]  = array(
12             "id" => $book["id"],
13             "title" => $book["title"],
14             "author" => $book["author"],
15             "summary" => $book["summary"]
16         );
17     }
18     $app->response()->header("Content-Type", "application/json");
19     echo json_encode($books);
20 });

()是修身的方法,路線到指定的URI上的GET請求。它的第一個參數是URI和最後一個參數是一個回調函數。使用關鍵字,使我們能夠從匿名函數的范圍內訪問外部變量。
在函數中,我們創建,遍歷數據庫返回的每個記錄(書的數組$ DB->圖書()返回一個遍歷參考的書籍表)。發送響應的Content-Type頭為“應用程序/ json”我們發出的編碼書數據陣列。
現在讓我們寫一本書與一個給定的ID的詳細信息端點:

01 <?php
02 ...
03 $app->get("/book/:id", function ($id) use ($app, $db) {
04     $app->response()->header("Content-Type", "application/json");
05     $book = $db->books()->where("id", $id);
06     if ($data = $book->fetch()) {
07         echo json_encode(array(
08             "id" => $data["id"],
09             "title" => $data["title"],
10             "author" => $data["author"],
11             "summary" => $data["summary"]
12             ));
13     }
14     else{
15         echo json_encode(array(
16             "status" => false,
17             "message" => "Book ID $id does not exist"
18             ));
19     }
20 });

在這裡,我們添加了一個參數,本書的ID傳遞路線。在執行這條路線,斯利姆將調用的回調函數作為參數的參數值。
請注意該參數是強制性的。您可以通過它放在像括號內可選:/書(/ ID),如果你正在做一個參數可選,不過,你將不能夠指定的回調函數的參數。在這種情況下,你可以使用func_get_args()以任何參數傳遞給回調函數來獲得。
添加和編輯書籍
現在,讓我們的地址端點添加和更新圖書信息負責。我們將使用後()方法來添加新的數據,並把()來更新現有的數據。

01 <?php
02 ...
03 $app->post("/book", function () use($app, $db) {
04     $app->response()->header("Content-Type", "application/json");
05     $book = $app->request()->post();
06     $result = $db->books->insert($book);
07     echo json_encode(array("id" => $result["id"]));
08 });
09
10 $app->put("/book/:id", function ($id) use ($app, $db) {
11     $app->response()->header("Content-Type", "application/json");
12     $book = $db->books()->where("id", $id);
13     if ($book->fetch()) {
14         $post = $app->request()->put();
15         $result = $book->update($post);
16         echo json_encode(array(
17             "status" => (bool)$result,
18             "message" => "Book updated successfully"
19             ));
20     }
21     else{
22         echo json_encode(array(
23             "status" => false,
24             "message" => "Book id $id does not exist"
25         ));
26     }
27 });

為應用程序請求()返回當前請求對象(Slim_Http_Request的使用POST)或把數據。你可以得到的POST值員額()這個對象的方法,使用()方法的沽值。在這裡,我們假設兩個POST和PUT數據信息表的列名作為鍵的鍵/值對。在現實世界的應用程序,你將需要添加一些驗證和錯誤處理,但我已經為簡單起見,這裡省略。
如果你打算從浏覽器訪問您的修身應用,你將不能夠很容易地使PUT請求,浏覽器通常不公開通過HTML的方法。為了克服這個問題,修身有一個規定,它可以讓你覆蓋POST請求將放置在一個隱藏字段的形式。字段的名稱應該是“_method”設置為“PUT”的價值。

1 <form action="#" method="post">
2  <input type="hidden" name="_METHOD" value="PUT">
3  Title: <input type="text" name="title"><br>
4  Author: <input type="text" name="author"><br>
5  Summary: <textarea name="summary"></textarea>
6  <br>
7  <input type="submit" value="Submit">
8 </form>

刪除書籍
我們需要的下一個顯而易見的事情,現在我們有添加,編輯和書單,在我們的Web服務端點,端點刪除書籍。它應該接受書要刪除的ID,並從數據庫中刪除相應的記錄。
01 <?php
02 ...
03 $app->delete("/book/:id", function ($id) use($app, $db) {
04     $app->response()->header("Content-Type", "application/json");
05     $book = $db->books()->where("id", $id);
06     if ($book->fetch()) {
07         $result = $book->delete();
08         echo json_encode(array(
09             "status" => true,
10             "message" => "Book deleted successfully"
11         ));
12     }
13     else{
14         echo json_encode(array(
15             "status" => false,
16             "message" => "Book id $id does not exist"
17         ));
18     }
19 });
一切都非常簡單。首先,我們取給定的ID從數據庫中相應的行,就像我們已經做了的時候本書詳細介紹了。行對象上調用的delete()方法從數據庫中刪除該記錄。www.2cto.com
我們已經建立了相關的所有書籍進行必要的終點。在某些情況下,您可能希望有一個單一的路線,將響應多個請求方法。它可以實現使用的地圖()的斯利姆方法。

總結

在這篇文章中,我們已經討論了創建一個RESTful Web服務,使用超薄框架。現在,你應該能夠創建自己的Web服務應用程序,沒有太多的麻煩。
當然,也有很多事情比這裡討論的簡單的事情可以做。你可以有很多參數,數據驗證等航線。因此,深入和喜歡苗條和NoORM來幫助你實現你的目標使用的工具。


作者:ssoftware

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved