我正在向 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/