我正在寻找一种方法来在我的基于PHP的Web应用程序,数据库和CMS中围绕默认函数包装API.
我环顾四周,发现了几个"骨架"框架.除了我的问题的答案,还有Tonic,我喜欢的REST框架,因为它非常轻量级.
我最喜欢REST,因为它简单,并且希望基于它创建一个API架构.我试图了解基本原则并且还没有完全理解它.因此,一些问题.
我理解对吗?
假设我有一个资源"用户".我可以像这样设置一些URI:
/api/users when called with GET, lists users
/api/users when called with POST, creates user record
/api/users/1 when called with GET, shows user record
when called with PUT, updates user record
when called with DELETE, deletes user record
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是RESTful架构的正确表示吗?
我需要更多的动词
理论上创建,更新和删除可能就足够了,但在实践中我需要更多的动词.我意识到这些内容可以嵌入到更新请求中,但它们是具有特定返回代码的特定操作,我不想将它们全部放入一个操作中.
用户示例中的一些想法是:
activate_login
deactivate_login
change_password
add_credit
Run Code Online (Sandbox Code Playgroud)
我将如何表达RESTful URL架构中的操作?
我的直觉是对像这样的URL进行GET调用
/api/users/1/activate_login
Run Code Online (Sandbox Code Playgroud)
并期望返回状态代码.
但是,这偏离了使用HTTP动词的想法.你怎么看?
3.如何返回错误消息和代码
REST的美丽很大一部分源于其使用标准HTTP方法.如果出错,我会发出一个包含3xx,4xx或5xx错误状态代码的标头.对于详细的错误描述,我可以使用正文(对吗?).到现在为止还挺好.但是,传输专有错误代码的方法是什么,该错误代码在描述错误时更详细(例如"无法连接到数据库"或"数据库登录错误")?如果我把它和信息一起放入体内,我必须在事后解析它.这种东西有标准的标题吗?
4.如何进行身份验证
我正在尝试设计一个充分利用超媒体的RESTful服务.
优选地,用户代理应该只知道根URI,以便能够探索服务的所有功能 - 也就是说,我希望它在成熟度模型中处于第3级.
现在,用户代理应该能够创建一些资源,并在以后编辑它们.在创建/编辑时,用户代理需要访问其他一些资源/枚举.
foo资源:
{
"category" : "category chosen from an enumeration of possible categories",
"color" : "color chosen from an enumeration of possible colors",
"aRelatedResource" : "resource identifier from chosen from a collection"
}
Run Code Online (Sandbox Code Playgroud)
鉴于前面提到的要求,我提出了以下模式:
有一个fooRoot资源:
{
// no properties, only links
"_links" : {
"foos" : { "href" : "URI-to-foos" },
"fooCreator" : { "href" : "URI-to-plain-fooWriter" }
}
}
Run Code Online (Sandbox Code Playgroud)
包括链接到fooWriter在FOO资源:
foo资源:
{
"category" …Run Code Online (Sandbox Code Playgroud) 我刚刚阅读了有关REST URL的内容,并看到了以下示例:
/ API /用户/的getUser
现在,如果通过HTTP使用动词GET访问它,这不是一个错误的URL,因为它描述了URL中的动作(GET)吗?