在PHP中创建RESTful API?
我开发了一个非常快速简单的PHP应用程序,用于从XML文件中读取分类广告,并允许用户对其执行CRUD操作(这是一个家庭作业) 我现在的任务是将这个应用程序开发成RESTful服务。这位教授实际上似乎对RESTful服务没有任何经验,因为他说我的应用程序被发现可以提交给下一个作业,而我的研究表明它并没有真正满足所有RESTful要求 不管怎样,为了学习的目的,我想正确地做这件事,即使我能交上我的旧作业并获得好成绩。但是我在学习从哪里开始时遇到了困难;我不确定RESTful服务到底是什么 我认为获得建议的最好方法是发布我之前作业中的示例代码,看看我是如何处理事情的,以及我需要如何处理事情 例如,下面是我如何创建新的分类广告 Create.php在PHP中创建RESTful API?,php,xml,rest,Php,Xml,Rest,我开发了一个非常快速简单的PHP应用程序,用于从XML文件中读取分类广告,并允许用户对其执行CRUD操作(这是一个家庭作业) 我现在的任务是将这个应用程序开发成RESTful服务。这位教授实际上似乎对RESTful服务没有任何经验,因为他说我的应用程序被发现可以提交给下一个作业,而我的研究表明它并没有真正满足所有RESTful要求 不管怎样,为了学习的目的,我想正确地做这件事,即使我能交上我的旧作业并获得好成绩。但是我在学习从哪里开始时遇到了困难;我不确定RESTful服务到底是什么 我认为获得
//Basically just a list of <INPUT TYPE = "text" NAME = "something"> in the <body> fields
<html><head><?php $simplerXML = simplexml_load_file('file.xml');
//Generate the basic ad information
$newAd = $simplerXML->addChild('advertisement','');
$newAd->addAttribute('category', $_POST["category"]);
$title = $newAd->addChild('title', $_POST["title"]);
$title->addAttribute('ID', $_POST["ID"]);
$pageTitle = $newAd->addChild('pagetitle', $_POST["pagetitle"]);
//etc, for all the SUBMIT boxes
//save the XML
$simplerXML->asXML('file.xml');
echo "<script type='text/javascript'>
//redirect back to ad listing page
window.onload = function () { top.location.href = 'ads.php'; };
</script>";
?></head>
<body></body></html>
//基本上只是字段中的一个列表
CreateSuccess.php
//Basically just a list of <INPUT TYPE = "text" NAME = "something"> in the <body> fields
<html><head><?php $simplerXML = simplexml_load_file('file.xml');
//Generate the basic ad information
$newAd = $simplerXML->addChild('advertisement','');
$newAd->addAttribute('category', $_POST["category"]);
$title = $newAd->addChild('title', $_POST["title"]);
$title->addAttribute('ID', $_POST["ID"]);
$pageTitle = $newAd->addChild('pagetitle', $_POST["pagetitle"]);
//etc, for all the SUBMIT boxes
//save the XML
$simplerXML->asXML('file.xml');
echo "<script type='text/javascript'>
//redirect back to ad listing page
window.onload = function () { top.location.href = 'ads.php'; };
</script>";
?></head>
<body></body></html>
addChild(“广告”),“”;
$newAd->addAttribute('category',$_POST[“category]”);
$title=$newAd->addChild('title',$_POST[“title”]);
$title->addAttribute('ID',$_POST[“ID]”);
$pageTitle=$newAd->addChild('pageTitle',$_POST[“pageTitle]”);
//等,用于所有提交框
//保存XML
$simplerXML->asXML('file.xml');
回声“
//重定向回广告列表页面
window.onload=function(){top.location.href='ads.php';};
";
?>
我还在RUD操作中使用URL参数。我听说URL参数也不被允许
谢谢
编辑:
那么SWITCH语句是否会出现在index.php文件中?然后每种情况都会调用一个函数,即为POST方法调用CreateXML?
那么它需要的参数将是对象类型、对象id和内容类型?如何获取更新XML所用的值,是否将其发送到包含输入框列表的Create.php文件?如果您的服务支持所有CRUD操作,建议始终实现RESTful接口。这样做并不特别难。我在下面概述了一些基本知识 RESTful服务只需做几件事:
1-请求方法 RESTful服务需要支持的4种HTTP请求方法是:
switch ($_SERVER["REQUEST_METHOD"]) {
case "POST":
// Create action
break;
case "GET":
// Retrieve action
break;
case "PUT":
// Update action
break;
case "DELETE":
// Delete action
break;
}
RewriteEngine On
RewriteRule ^([^\/]+)\/([^\.]+)\.(\w+)$ index.php?object_type=$1&object_id=$2&content_type=$3
- POST=创建
- 获取=检索
- PUT=更新
- 删除=删除
- 补丁=编辑(部分更新,例如“更改密码”。PUT变为“替换”)
- HEAD=仅页眉(关于资源的元数据)
switch ($_SERVER["REQUEST_METHOD"]) {
case "POST":
// Create action
break;
case "GET":
// Retrieve action
break;
case "PUT":
// Update action
break;
case "DELETE":
// Delete action
break;
}
RewriteEngine On
RewriteRule ^([^\/]+)\/([^\.]+)\.(\w+)$ index.php?object_type=$1&object_id=$2&content_type=$3
2-状态代码 您应该从服务中进一步实现HTTP状态代码,以便将状态反馈给客户端,例如:
- 20x=成功
- 30x=重定向
- 40x=通信问题
- 50x=服务器错误
header("Status: 500 Internal Server Error");
您可以在此处参考已实现HTTP状态代码的完整列表:
3-URI 对于URI,RESTful服务通常遵循自上而下的分类命名方法,例如
/object_type/id.content_type
示例:
POST /user
PUT /user/1
GET /user/1.json
GET /user/1.html
您可以在.htaccess
文件中使用Apache withmod_rewrite
为上述约定实现一个非常基本的RESTful路由器,如下所示:
switch ($_SERVER["REQUEST_METHOD"]) {
case "POST":
// Create action
break;
case "GET":
// Retrieve action
break;
case "PUT":
// Update action
break;
case "DELETE":
// Delete action
break;
}
RewriteEngine On
RewriteRule ^([^\/]+)\/([^\.]+)\.(\w+)$ index.php?object_type=$1&object_id=$2&content_type=$3
然后让index.php
查找适当的对象类型和id以进行适当的路由,例如:
$object = $_GET["object_type"];
$id = (int) $_GET["object_id"];
$content_type = $_GET["content_type"];
// Route from here to a class with the name of the object (e.g. UserController) via __autoload
// or to a file (e.g. user.php) via include, and pass id and content_type as params
4-无国籍状态 简单地说,服务器不维护客户端的“状态”。不需要存储会话或状态。每个请求代表一个完整的事务。也就是说,如果我得到user/1,服务器将不会记得我做了那件事,未来的请求将不会依赖于或受以前的请求影响 如果您实现了这些标准,恭喜您,您已经构建了一个RESTful服务 “宁静”是一个宽泛的概念,有不同程度的“宁静”。他是这里的好向导 以下是其他答案中未提及的一些更高层次的特征(这也是很好的):
- 您可以使用
标题指示资源在其他URL或表示中可用内容位置
- 通过使用
和Accept
标题的内容协商,可以提供资源的不同表示形式(html、json、xml等)content-type
- 一个常见的违反这一原则的例子是类似“url”的urlhttp://example.org/profile“根据登录用户的不同,它提供不同的用户配置文件
- 最好将资源与授权分开:http://example.org/profile/{USERID}“将始终提供特定用户的USERID,但如果客户端没有权限,则返回401(未授权)。(此外,授权信息应随每个requ一起发送