【问题标题】:Symfony routing with an API Web Service带有 API Web 服务的 Symfony 路由
【发布时间】:2011-01-29 02:21:21
【问题描述】:

我正在完成我们网络服务的 API。现在我正在考虑如何更改路由,所以如果我们决定制作一个新版本,我们不会破坏第一个 API。

现在:

url: /api/:action
param: { module: api, action: :action }
requirements:
  sf_format: (?:xml|json)

我的想法:

url: /api/v1/:module/:action
param: { module: api1, action: :action }
requirements:
  sf_format: (?:xml|json)

url: /api/v2/:module/:action
param: { module: api2, action: :action }
requirements:
  sf_format: (?:xml|json)

这很简单,但完美的解决方案是采用以下路线

# Automatically redirects to one module or another
url: /api/v:version/:module/:action
param: { module: api:version, action: :action }
requirements:
  sf_format: (?:xml|json)

关于如何做的任何想法?你建议我们做什么?

谢谢!

【问题讨论】:

    标签: php api routing symfony1 routes


    【解决方案1】:

    使用旧的路由规则并在末尾附加 .xml1/.xml2/.json1/.json2 怎么样?这样你就可以重用你当前的模块并且只需要创建一个新的视图(“indexSuccess.xml1.php”)。

    或者创建一个新的路由类?

    【讨论】:

    • 这是一个非常好的主意,但只有当控制器动作在两种情况下都做同样的事情时才有效。如果它们略有不同,我需要 if/else 检查版本以搜索另一个参数,或返回不同的数组等。
    【解决方案2】:

    您可能应该创建一个自定义路由集合,如 here 所示。

    这将允许您满足您的任何路由需求。您可以将版本逻辑移动到路由类和路由集合类。

    【讨论】:

      【解决方案3】:

      我认为拥有 2 条路线的方法,一条带有 v1,另一条带有 v2 是更好的解决方案。这听起来像是重做工作,但如果你开始思考,不得不写的原因是第一个与第二个不相容。因此,混合这两种逻辑将是一种矫枉过正。如果你认为将来有一天你可以有 3 个版本,你认为你的逻辑会是什么样子?

      更好的解决方案是将两者分开,因此如果您需要停止对版本 1 的支持,删除版本 1 的文件会很容易。=)

      【讨论】:

      • 这就是我两年前最终做的事情。时间过得真快!
      猜你喜欢
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 2011-11-05
      • 2015-02-04
      相关资源
      最近更新 更多