代码之家  ›  专栏  ›  技术社区  ›  Topher Fangio

我应该如何使用Rails3.0创建一个RESTAPI?

  •  36
  • Topher Fangio  · 技术社区  · 15 年前

    我似乎在网上找不到关于在Rails中构建RESTAPI的不同方法的很多信息;所以我有两个问题:

    1. 有人能给我指一些文章来说明不同的优点/缺点吗? 方法?
    2. 请您分享一下您对以下方法的优缺点的看法好吗?

    建议的方法

    1. 使用标准控制器在用户添加时返回XML .xml 到最后 URL的

      赞成的意见:

      • 这是内置在轨道上的,非常容易使用
      • 采用与Rails相同的基于资源的方法,因此 要理解/记住的现有用户

      欺骗:

      • API与主站点分离不干净,维护难度大
      • 人们可能认为 XML 会在不适合的地方工作

    2. 使用名称空间路由创建单独的仅处理API的API控制器 功能,但仍可以访问网站使用的相同模型

      赞成的意见:

      • API大部分是分离的
      • 仍使用资源满控制器

      欺骗:

      • URL的形式为site.com/api/resource.xml,这可能使人们认为 资源可用
      • API仍然是网站代码/项目的一部分;因此,很难维护

    3. 使用路由转发和约束将所有API调用转发到机架 应用

      赞成的意见:

      • API完全分离
      • 不需要使用资源完整样式
      • URL清楚地显示它是一个API,您应该检查文档以查看可用的内容。 (至少,我的思想是这样工作的;我假设其他开发人员的思想也是这样工作的)

      欺骗:

      • 难以使用网站代码中的模型
      • 作为一个单独的项目更容易维护,但这意味着更难与 现有站点
      • 必须保持代码库同步,因为模型可能会因站点功能/错误修复而更改。

    2 回复  |  直到 15 年前
        1
  •  17
  •   Andy_Vulhop    15 年前

    我建议,只要代码是干的,API和你的网站在同一个项目中并不是一件坏事*。正如您所指出的,拥有单独的代码基是一个挑战,因为您必须使它们与您所做的每一个功能/错误修复保持同步。如果它们在同一个地方,就更容易维护。只要保持代码干燥,这个方法就是明显的赢家。

    我将提供来自控制器的XML和JSON,其子域由Rails的路由引擎处理。当有人了解api.site.com/resource.xml的模式,并试图访问不存在的资源时,这真的没什么大不了的。只要你的API被清晰地记录下来,当你试图访问一个不在你的API中的资源时,你会优雅地失败/出错,那就没问题了。我将尝试返回一条消息,说明资源不可用,以及API文档的URL。这不应该是任何API使用者的运行时问题,因为这应该是发现API的一部分。

    我只要0.02美元。



    *干=不要重复你自己。干代码意味着您不会复制粘贴或重写站点和API的相同内容;而是从多个地方提取和调用。

        2
  •  3
  •   Topher Fangio    15 年前

    我认为你最好的解决办法是把你的前两点合并起来。

    我建议使用JSON而不是XML:唯一有利于XML的是XPath,它在返回的数据中是无用的。JSON带来更好的响应时间(以及更可读的数据,以便更好地进行调试!)P)。另外,大多数语言都可以读取JSON。例如,PHP可以使用 json_decode 所以这是一个很好的观点。;)

    对于控制器,您可以对其命名,但这不是一项义务,在某些情况下,最好避免使用大量条件进行胖操作。使用Rails3路由器,在子域(api.webapp.com)中分离api调用是很简单的。

    对于模型,您应该使用与整个应用程序相同的方法。

    新的Rails路由器语法是sugar,你会喜欢的。祝您好运,玩得开心!:)