Web API设计技巧

时间:2011-08-12 10:56:21

标签: api api-design multiplatform

我目前正在开发一个非常简单的Web服务,并且认为我可以为此编写API,所以当我决定在新平台上扩展它时,我只需要编译解析器应用程序。也就是说,除了我之外,API并不适合其他开发人员,但我不会限制访问它,所以任何人都可以在此基础上构建。

然后我想我甚至可以通过这个API运行网站本身,原因有很多,比如带宽消耗较低(浏览器生成的HTML)和客户端缓存。因为AJAX沉重似乎是一个更大的理由。

布局如下:

Server (database, programming logic)
|
API (handles user reads/writes)
|
Client application (the website, browser extensions, desktop app, mobile apps)
|
Client cache (further reduces server reads)

介绍之后我的问题是:

  1. 是否善用API
  2. 通过API运行整个网站是个好主意
  3. 我使用API​​有什么安全身份验证选择(出于某种原因我不想使用HTTPS)
  4. 修改

    其他问题:

    1. 我没有考虑的任何其他方法
    2. 使用此方法可能产生的一些潜在问题我未考虑

2 个答案:

答案 0 :(得分:17)

首先要做的事情。

询问设计(或实际上是什么)是否“好”取决于你如何定义“善”。典型的标准是性能,可维护性,可伸缩性,可测试性,可重用性等。如果您可以添加一些上下文,这将有所帮助。

说完了......

是否善用API

将业务逻辑与表示逻辑和数据持久性逻辑分离出来通常是个好主意。你的设计就是这样,因此我很乐意将其称为“好”。你可能会看一个正式的设计模式来做到这一点 - 模型视图控制器可能是当前的默认设置,尤其是。用于Web应用程序。

通过API运行整个网站是个好主意

嗯,这取决于应用程序。完全可以在Javascript / Ajax中编写应用程序,但是存在浏览器兼容性问题(尤其是旧版浏览器),并且您必须为用户通常期望的Web应用程序提供支持,例如深层链接和搜索引擎友好性。如果你有一个考虑周全的API,你可以在服务器上进行一些页面生成,如果这样可以更容易。

我有什么选择进行安全身份验证,使用API​​(出于某种原因,我不想使用HTTPS)

棘手的 - 使用这种应用程序,您必须区分对用户进行身份验证和验证应用程序。对于前者,OpenID或OAuth可能是主要的解决方案;对于后者,请查看Google如何要求您注册使用他们的Maps API。

在大多数Web应用程序中,HTTPS不用于身份验证(证明当前用户是他们所说的人),而是用于加密。这两者是相关的,但绝不等同......

我没有考虑的任何其他方法

也许这更符合问题5 - 但根据我的经验,API设计是一项相当深奥的技能 - API设计师很难能够准确预测API的客户端将需要什么。我会认真考虑在没有API的情况下为您的第一个客户端平台编写应用程序,并稍后将API分解出来 - 这样,您只需在第一个版本中构建所需的内容。

使用此方法可能会出现哪些我未考虑的潜在问题

版本控制与API有很大关系 - 一旦你创建了一个界面,你几乎永远不会改变它,特别是对于你无法控制的多个客户端。我将构建版本作为一流的概念 - 使用RESTful API,您可以将其作为URL的一部分。

答案 1 :(得分:-2)

  1. 这是否适用于API

    取决于您将对该应用程序执行的操作。

  2. 通过API运行整个网站是个好主意

    不,因此您的网站只能通过您的应用访问。这种方式此实现会阻止与其他浏览器的兼容性

  3. 我使用API​​有什么安全身份验证选择(出于某种原因我不想使用HTTPS)

    您可以使用omniauth

  4. 我没有考虑的任何其他方法

    创建两个前端,一个在您的应用程序中,另一个在常见浏览器中

  5. 使用此方法可能会出现哪些我未考虑的潜在问题

    我现在不知道你的想法,但我看不出重大危险。