我最近使用Luracast Restler开始了一个项目。这似乎是一种设置REST API的非常简单有效的方法。使用非常少的代码,我能够为我的类别和产品资源提供CRUD服务。 我的GET方法如下所示:
class Categories
{
function get($id=NULL) {
if (isset($id))
{
// return category details for $id.
}
else
{
// return all categories.
}
}
}
class Products
{
function get($id=NULL) {
if (isset($id))
{
// return product details for $id.
}
else
{
// return all products.
}
}
}
客户可以使用以下方式获取“图书”类别的详细信息: HTTP:API /类别/书籍
或所有类别使用: HTTP:API /类别
同样的产品。一个产品: HTTP:API /产品/ 123 所有产品: HTTP:API /产品
到目前为止一切顺利。 现在我想要进一步参与一些事情。我想让我的客户访问某个类别的产品。 我希望我的URI是: HTTP:API /类别//产品
E.g.
http:api/categories/books/products
从那里,我想提供: HTTP:API /类别//产品/
E.g.
http:api/categories/books/products/123
这使我的客户能够使用渐进式链接从一种资源转移到另一种资源,我将其视为REST的核心原则。 但我无法通过Restler看到实现这一目标的方法。我已经看到一些提到用于指定URI映射的JavaDoc注释,所以我尝试了这个:
class Products
{
/**
* url GET /categories/:catId/products/:prodId
*/
function get($catId=NULL, $prodId=NULL) {
// Get product($prodId) of category($catId)
}
}
但这不起作用。 Restler似乎没有从评论中获取任何信息;它隐式地根据类名和函数名创建URI路由。
有人可以帮忙吗?我错过了什么吗?任何建议都将不胜感激。
答案 0 :(得分:1)
上面的示例中的一切都很好,除了一个简单错误阻止它工作之外,你想要实现的目标!
您的PHPDoc评论缺少@
按如下方式更改您的代码
<?php
class Products
{
/**
* @url GET /categories/:catId/products/:prodId
*/
function get($catId=NULL, $prodId=NULL) {
// Get product($prodId) of category($catId)
}
}
另请查看相关问题 How do you organize Luracast Restler classes to create related route endpoints?