具有多个应用程序的单API

时间:2014-01-03 20:32:43

标签: rest

我正在从概念上重新设计项目,并且正在努力解决方法是否有意义。因此,为了避免意见开放式讨论,我将尝试尽可能具体。

我们有几个网络应用程序(5+),每个都被视为产品。它们是相关的并且共享相似的数据 - 甚至到App1中的用户应该能够从App2引用或导入他/她的数据。在我看来,逻辑上有一个REST API,它充当数据模型和几个应用程序之间的层。通过这种方式,可以在API级别进行更改,并且可以在所有应用程序中进行更改(假设它保持向后兼容性)。

我正在尝试考虑如何设计此REST API以有效地与多个应用程序一起工作。以下是我的一些注意事项:

版本

在考虑这个问题时,我希望API可以像api.example.com/v1api.example.com/v2一样进行版本控制。我认为这对未来以及发展的进展非常重要。

命名空间

这是一个问题领域。如果两个应用程序以不同方式使用用户资源会怎样?就像App1需要特定的处理和参数,但不是App2?我确信用户是一个不好的例子,因为它应该是相当标准的,但我可以看到发生冲突。那么我创建这样的命名空间吗?

  • api.example.com/v1/app1
  • api.example.com/v1/app2

在做类似的事情时,我将应用程序紧密地耦合到API。也许资源名称空间ID#?

版本+名称空间

如果我需要对App1的命名空间API进行重大更改,如果全局增加版本,现在其他命名空间API在v2上,即使它们没有收到更改,该怎么办?我应该像这样切换命名空间和版本吗?

  • api.example.com/app1/v1

复杂请求

不幸的是,由于这些应用程序的性质,它们非常复杂。当然,在这种重写中,为了简化事情,很多使它们成为这种方式的东西被重构,但我们仍然需要某些似乎不适合其余模式的函数。像这样的方法调用是否有意义?

  • [GET] api.example.com/v1/app1/object1/with_object2
  • [GET] api.example.com/v1/app1/object1/with_object3_and_revision_history

那些过于通用,很难想到手边的实际用例。

TL; DR 如何组织单个REST API作为多个不同应用程序和单个数据模型之间的中介?

0 个答案:

没有答案