搭配修身写一个RESTful Web服务

362576256 2012-12-09 03:40:56
在站长中心这里,你了解什么是REST和它是如何工作的。在这篇文章中,我想向您展示如何创建一个RESTful Web服务,使用超薄,PHP微框架西纳特拉,Ruby框架的启发。它非常适合创建简单的RESTful Web服务和像路由器,请求,响应,并查看一些最起码的组件。很简单,很容易理解和使用。
斯利姆世界问好
要获得修身开始,你需要先下载它。它需要PHP 5.2 +,让你写在这两个程序的风格,或5.3 +风格的应用程序,例如使用匿名函数。在本文中我将使用所有的例子5.3作风编码,假设你已经熟悉它了。
要创建一个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()方法从数据库中删除该记录。
我们已经建立了相关的所有书籍进行必要的终点。在某些情况下,您可能希望有一个单一的路线,将响应多个请求方法。它可以实现使用的地图()的斯利姆方法。

总结

在这篇文章中,我们已经讨论了创建一个RESTful Web服务,使用超薄框架。现在,你应该能够创建自己的Web服务应用程序,没有太多的麻烦。
当然,也有很多事情比这里讨论的简单的事情可以做。你可以有很多参数,数据验证等航线。因此,深入和喜欢苗条和NoORM来帮助你实现你的目标使用的工具。

...全文
329 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
小阳- 2015-04-03
  • 打赏
  • 举报
回复

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧