【问题标题】:Web API design tipsWeb API 设计技巧
【发布时间】:2011-10-25 17:31:09
【问题描述】:

我目前正在开发一个非常简单的 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)

编辑

其他问题:

  1. 我没有考虑过的任何替代方法
  2. 使用这种方法可能会出现哪些我没有考虑到的潜在问题

【问题讨论】:

    标签: api api-design multiplatform


    【解决方案1】:

    首先要做的事情。

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

    话说回来……

    API这么好用吗

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

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

    嗯,这取决于应用程序。完全用 Javascript/Ajax 编写应用程序是完全可能的,但是存在浏览器兼容性问题(尤其是旧浏览器),并且您必须构建对用户通常期望从 Web 应用程序中获得的东西的支持,例如深度链接和搜索引擎友好性。如果你有一个精心设计的 API,你可以在服务器上进行一些页面生成,如果这样更容易的话。

    我有哪些安全身份验证选择,使用 API(出于某种原因我不喜欢使用 HTTPS)

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

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

    我没有考虑过的任何替代方法

    也许这更适合问题 5 - 但根据我的经验,API 设计是一项相当深奥的技能 - API 设计人员很难准确预测 API 的客户端需要什么。我会认真考虑为您的第一个客户端平台编写不带 API 的应用程序,然后再将 API 分解出来——这样,您只构建第一个版本中需要的内容。

    使用这种方法可能会出现哪些我没有考虑到的潜在问题

    版本控制对于 API 来说很重要 - 一旦您创建了一个接口,您几乎永远无法更改它,尤其是对于您无法控制的多个客户端。我将构建版本控制作为一流的概念 - 使用 RESTful API,您可以将其作为 URL 的一部分。

    【讨论】:

    • 您好,感谢您的出色回答!我不关心较旧的浏览器和搜索引擎,因为整个网站是一个登录索引,用户从那里看不到彼此的信息(而且很可能也不希望看到他们的信息——尤其是搜索引擎)。至于身份验证,我主要想知道如何与用户保持身份识别。我在想-用户登录>服务器给他他的会话ID>用户每次联系服务器时都会发送他的SID。或者服务器发送一些字符串,用户根据一些规则回复另一个字符串,等等。
    【解决方案2】:
    1. API 这么好用吗

      取决于您将使用该应用程序做什么。

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

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

    3. 我有哪些安全身份验证选择,使用 API(出于某种原因我不喜欢使用 HTTPS)

      您可以使用omniauth

    4. 我没有考虑过的任何替代方法

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

    5. 使用这种方法可能会出现哪些我没有考虑到的潜在问题

      我现在不明白你的想法,但我看不到重大危险。

    【讨论】:

    • 2.这是一个兼容性问题吗?如果我通过我的 API 制作一个跨浏览器兼容的 Web 应用程序,那应该没问题。我的整个想法是通过使用 AJAX 运行网站的 JS 中实现的 API 解析器来提供基本页面。这样,该站点就不会集成到服务器中,如果有人喜欢,他们可以在他们的服务器上创建一个通过我的 API 运行的站点。关键是,如果您保存网页并且缓存它甚至可以离线工作,这种方法仍然有效。
    • 3.我可以通过其他方式进行身份验证吗?我想在我的服务器上做,不使用第三方服务。
    • 2.您将只创建一个网页来控制任何请求??这是不好的。如果您将使用 ajax 创建每个页面,为什么不让用户静态调用该页面?对他(只有一名工人处理)和您(只有一次访问您的服务器)来说很容易
    • 3. OAuth 不是第三方,它是一种用于身份验证的设计模式,是一种使用 api 的好方法。看看 twitter 身份验证:你有一个令牌和一个令牌秘密,服务器进行计算以进行身份​​验证,我可以t explain the oauth better, but it is better then plain authentication because you dont 通过 post 或 get 发送密码(女巫我们可以检索此详细信息),而你可以使用 oauth 作为基础创建自己的身份验证。
    • 如果你还没有t see the good in oauth check here: [OAuth explained](http://ungeekdapo.wordpress.com/2008/04/04/oauth-explained/) and dont 尝试使用一些库,尝试实现它,很简单,你可以找到很多有用的链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多