代码之家  ›  专栏  ›  技术社区  ›  Komang

restzend框架,如何路由基于模块的版本控制和Api密钥

  •  2
  • Komang  · 技术社区  · 15 年前

    我正在用zf1.10.8构建一个restfulapi服务,作为一个新手,在处理ZF路由时有点困惑。

    我需要在url中有版本控制、api\ U密钥和响应格式,例如:

    /:版本/:响应\格式/:api \密钥/:控制器。。。 /1.0/json/1234567890/articles/

    版本基于模块,默认为最新版本

    怎么做?

    2 回复  |  直到 11 年前
        1
  •  4
  •   lo_fye    14 年前

    版本控制并不像将/v1/放入URI那么简单。 事实上,这使得API不是REST。

    为了正确地执行REST,每个资源(客户机想要访问的东西)都只有一个URI。 对于v1&v2&v2,URI保持不变;更改的是如何将资源呈现给客户端。

    • 你怎么知道他们想要哪个版本?他们将其设置为请求头。
    • 你怎么知道他们想要哪种格式(json、xml、html、wml等)?他们将其设置为请求头。

    要记住的是他们请求的URI 保持不变 因为每个资源只有一个URI,所以您永远不希望URI中有一个方法名。

    相反,您应该使用正确的HTTP方法 -要创建位置,请执行HTTP POST to/place -要查看Place43,请执行HTTP GET to/place/43 -要删除place 43,请执行HTTP delete to/place/43

    在将响应返回给客户机时,还应该包括客户机接下来可能要检索的所有相关数据位的uri。REST的一个原则是,一旦客户机连接起来,它就可以在API本身中找到它所需要的所有uri。它只需要知道一个URI就可以进入系统,从那时起,所有必需的URI都会在响应中提供。这样做的好处是允许您随意更改URI,因为客户端永远不应该关注它们是什么。。。只是根据需要使用它们(即,客户机知道URI指向什么,但不知道它指向哪里)。

    最后,请记住,您不希望将成功/错误标记作为xml或json发送。它们应该作为HTTP响应代码发送回来。有一个代码用于创建,一个用于删除,一个用于更新,等等。

    下面是一些关于REST的精彩文章,特别是关于使用Zend框架进行REST的文章:

        2
  •  0
  •   Tim Gautier    14 年前

    而不是像这样的基础:“http://www.example.com/"

    可能是:“http://www.example.com/1.0/"

    为了更安全一点,您可以要求请求在标头中包含版本号。然后,您的代码只需检查头中的版本号是否与要路由到的代码的版本号匹配,如果不匹配,则抛出错误。

    例如:发送GET to http://www.example.com/2.0/ 如果版本号在1.0的头中,将抛出“错误的版本”错误。你的代码只需要知道头的版本!=当前版本,因此在发布新版本时不需要更改。