php - 交响乐团 : REST web-service for bots and humans - open questions

标签 php web-services rest symfony1 bots

我正在向 Symfony 应用程序添加一个 API,该应用程序应充当 REST Web 服务。但还有一些 Unresolved 问题。

机器人的不同 URI?

我经常阅读“建议”使用像 /api/:id/[...] 这样的 URI,但我认为它们不符合 REST 标准:无论是机器人还是人类 - i已识别出相同的u独特r资源。

我这么问,是因为我上面的说法有道理,但我不认为其他人都有错。

修改现有 Controller ?

对于这两种情况我需要单独的 Controller 逻辑有几个原因:

  • 在 api 请求的情况下没有 session 登录
  • 必须创建不同的 Symfony 表单(例如,根本不需要任何小部件。)
  • JSON/XML 而不是 HTML 输出

我不想修改现有的 Controller 。根据开放-封闭原则,类应该对扩展开放,但对修改关闭,并且 Controller 类已经在“生产”环境中使用。

我的想法是使用额外的 HTTP header 字段(例如“X-UseApi”)。路由应该通过评估来调用不同的操作。这可以在routing.yml中实现吗?如何?你还有其他想法吗?

身份验证

这就是我实现机器人身份验证的方式:


$user = Doctrine_Core::getTable('sfGuardUser')->findOneByUsername($params['user']);
if($user->checkPassword($params['password']))
{
  //...
}

但在我看来,代码看起来像是一个解决方法。对于整个 REST 身份验证问题是否有更好的解决方案? sfGuardPlugin/sfDoctrineGuardPlugin 是否不满足此类用例的条件?

提前致谢并欢呼, 鱼刺

最佳答案

我的方法是在路由中使用 sf_format 来区分机器人和人类(机器人可能需要使用 XML,而人类需要 HTML。

我会改变我的 Controller ,根据请求的格式将逻辑委托(delegate)给单独的类(这不应该是太多工作,您将获得所需的灵 active )。

至于身份验证 - 请提供更多有关您现在如何执行此操作的信息 - 该示例不足以让我大致了解您的实现是如何工作的。

关于php - 交响乐团 : REST web-service for bots and humans - open questions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4862540/

相关文章:

php - 如何在 Laravel 中基于用户显示数据列表

java - 与 JAX-WS 2.2.x 一起使用的最低 JDK 和 JRE

java - Jersey webservice 可扩展的下载文件和回复客户端的方法

java - 我们可以覆盖 Apache CXF 生成的 HTML 页面吗

c# - Firestore REST 身份验证

PHP - 重新格式化多维数组以插入到 MYSQL 中?

php - 使用 Laravel Eloquent 连接同一服务器上不同数据库中的两个 MySQL 表

php - 将 php 项目移动到 codeigniter 或更新现有框架

java - 遍历属性文件中的 SOAP 请求

rest - 在 HTTP GET 查询参数中传递用户名和密码