Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有相应的restful PHP函数的标准?_Php_Api_Rest_Standards_Coding Style - Fatal编程技术网

是否有相应的restful PHP函数的标准?

是否有相应的restful PHP函数的标准?,php,api,rest,standards,coding-style,Php,Api,Rest,Standards,Coding Style,在水果的restful API中,请求假设如下: /** * @path("/api/fruit") */ class Fruit{ /** * @route({"GET","/"}) * @param({"color","$._GET.color"}) * @param({"limit","$._GET.limit"}) */ function getFruits($color,$limit){ return $oFr

在水果的restful API中,请求假设如下:

/**
 * @path("/api/fruit")
 */
class Fruit{
    /**
     * @route({"GET","/"})
     * @param({"color","$._GET.color"})
     * @param({"limit","$._GET.limit"})
     */
    function getFruits($color,$limit){
        return $oFruit->get(NULL, array('color' =>$color),$limit);
    }
    /**
     * @route({"GET","/*"})
     * @param({"id","$.path[2]"})
     */
    function getFruitById($id){
       return $oFruit->get($id);
    }
}
api/水果
api/水果?限值=100
空气污染指数/水果/1
api/水果?颜色=红色
我认为必须有一个标准的功能,做的工作。例如,有些东西可能很容易翻译成
fruit.class.php

fruit.class.php

function get ($id, $params, $limit) {
    // query, etc.
}
因此,对于我上面的示例,代码如下所示

  • api/fruit

    $fruit = $oFruit->get();
    
  • api/水果?限量=100

    $fruit = $oFruit->get(NULL, NULL, 100);
    
  • api/fruit/1

    $fruit = $oFruit->get(1);
    
  • api/水果?颜色=红色

    $fruit = $oFruit->get(NULL, array('color' => 'red'));
    

是否有这样的行业标准,或者API/数据库函数总是一团糟?我真的很想标准化我的功能。

序曲

对于URL的外观,实际上没有一个标准或约定,几乎涵盖了所有情况

我能想到的唯一标准是(作为应用程序状态引擎的超媒体),它基本上规定客户机应该从以前的请求中派生它可以使用的url。这意味着URL是什么并不重要(但客户端如何发现它们才重要)

如今,REST是一种炒作,人们往往不理解它到底是什么。我建议你特别阅读罗伊·菲尔丁的论文

也是一本好书

PS:(超文本应用程序语言)是实现HATEOAS的标准(除其他外)

接口

因为URL没有标准,所以这个主题的接口也没有标准。这在很大程度上取决于您的需求、品味,也许还取决于您使用什么框架构建应用程序

David Sadowski已经开发了许多库和框架,可以帮助您开发RESTfull应用程序。我建议你看看其中的几个,看看它们是否以及如何解决你遇到的问题。你应该能从他们那里得到一些想法

另外,请阅读我在序言中的参考资料,因为它将使您对构建真正的RESTfull应用程序的应做和不应做的事情有很好的了解


PS:很抱歉没有给你一个简单明确的答案!(我不认为真的存在。)

你说的是获取过滤器。我更喜欢 关于内部代码的外观没有任何约定,也没有太多php框架支持“开箱即用”之类的功能。您可以看看magento rest api的实现

您可以使用诸如$model->get($where、$order、$limit)之类的函数调用 但是你应该

  • 定义资源属性

  • 将资源属性映射到数据库结果字段

  • 定义资源支持的筛选器

  • 检查筛选器,删除不支持的筛选器并生成相应的$where、$order、$limit


不,没有标准,因为其他人已经回答了…但是,在回答您关于创建太多方法的问题时…我通常只有一个search()方法,它根据我的搜索条件返回一个或多个结果。我通常创建一个“搜索对象”,它以OOP的方式包含我的where条件,然后可以由数据层解析…但这可能比你想要的要多…许多人会为他们的数据层构建DQL,等等。有很多方法可以避免getById、getByColor、getByTexture、getByColorAndTexture。如果你开始看到很多方法来覆盖搜索的每一个可能的组合,那么你可能做错了

至于rest方法命名…ZF2不是答案,但它是我目前在工作项目中使用的方法,它的方法是这样安排的(请注意,这是可怕的、危险的代码…对SQL注入开放…举个例子):

开源库可能满足您的需要

使用phprs,您可以实现如下所示的fruit.class:

/**
 * @path("/api/fruit")
 */
class Fruit{
    /**
     * @route({"GET","/"})
     * @param({"color","$._GET.color"})
     * @param({"limit","$._GET.limit"})
     */
    function getFruits($color,$limit){
        return $oFruit->get(NULL, array('color' =>$color),$limit);
    }
    /**
     * @route({"GET","/*"})
     * @param({"id","$.path[2]"})
     */
    function getFruitById($id){
       return $oFruit->get($id);
    }
}

通常,您访问这些方法中的HTTP请求对象,并传递slug变量令牌[例如,
/fruit/:id
]作为方法参数。我不认为有一个普遍接受的标准。大多数情况下,请求处理是由一个人用来传递数据的包决定的。如果你使用一个框架,你可能会遵守该框架的标准。如果是专有的,我想这取决于你的偏好。如果我说有一个标准,它会只需考虑OOP,MVC,并使其可读。把它做好。这正是我所想的,但我最终得到两个结果:一组模型函数,如GETByID、GETBYNAMY、GETBYDATE等,或者我最后得到了一个包含GET($ID,$PARAMs,$LIME)的更长的全功能函数。其中,$params是一个搜索参数数组,我的函数会对其进行排序。我希望有人能给出一个明确的答案,并说明为什么一个结果可能比另一个更好处理。对不起,我不是问url结构,我是问对应的“get”是否有标准“模型功能,谢谢!这很有道理。哦,天哪,我悬赏给了错误的答案!无论如何,谢谢你,至少你得到了正确的答案。不用担心,很高兴我能回答这个问题:)