【问题标题】:Language Agnostic API [closed]与语言无关的 API [关闭]
【发布时间】:2010-10-01 05:45:17
【问题描述】:

我正计划建立一个网络服务,或通过互联网公开的一些其他服务。我想为应用程序创建一个 API 以与此服务交互。我希望 API 可以在不同的语言中使用,例如 Java、C++、C# 或 PHP。如何为我的 API 维护一个代码库,同时为所有这些语言分发漂亮的打包二进制文件?另外,我可能想考虑这也可以是跨平台的。

更新 1

我还处于 Web 服务的早期阶段,但我 认为关键点之一是 许多工具支持 基于客户端的实现 WDSL 等服务的描述。 我还没有交付任何客户端 软件与我所做的任何事情,我 期望任何用户都能够构建 他们自己的客户适合他们的 需要。 --Brabster 的回答

我不反对将其作为一个直接的 Web 服务,然后提供一个 WSDL 文件。但是如果我想让客户端 API 做一些逻辑、加密、错误检查等等呢?

更新 2

就期望客户而言 使用你的 API 做任何事情,你 不能!你将一无所有 能够做到确保消费者 API 将做任何正确的事情。 这就是为什么强大的错误处理如此 重要的。你必须检查并加倍 检查所有来的 从客户端。你必须永远是 怀疑它,甚至假设 这是恶意的。真的没有 解决这个事实的好方法。 --Ryan Guill 的回答

我最初的想法是在 .NET 中创建一个 DLL 或程序集,然后客户端调用运行客户端的代码。该代码可以通过任何通信协议与服务器通信,但我的 API 将在他们的机器上运行。我猜 REST 并没有真正做到这一点。似乎在 REST 中,一切仍然是 HTTP 帖子。它几乎是没有肥皂的网络服务。

更新 3

我已接受 Ryan Guill 的回答。我认为一般的想法是我需要公开某种网络服务,对客户端的障碍最低。这样任何人都可以连接。然后让我所有的代码在服务器上运行。这似乎被认为是真正实现我所追求的平台和语言独立性的唯一愿望。

感谢大家的意见。

【问题讨论】:

标签: api


【解决方案1】:

我会使用 REST API,类似于 Flickr 的 API 的工作方式:http://flickr.com/services/api/

它的创建和维护相当简单,最大的缺点是它需要大量文档(但几乎任何你使用 API 的方式都会遇到这个问题)并且必须进行强大的错误处理。

但在我看来,这是创建最接近跨平台/跨语言的 API 的最佳方式。

更多信息在这里:http://www.xfront.com/REST-Web-Services.html

更新:提交者在帖子中添加了以下内容:

我不反对将其作为一个直接的 Web 服务,然后提供一个 WSDL 文件。但是如果我想让客户端 API 做一些逻辑、加密、错误检查等等呢?

我个人不喜欢使用 SOAP(使用 WSDL)。在服务器和客户端上使用 SOAP 有很多固有的开销。我认为这就是为什么你会看到越来越多的公共 API 是使用 REST 编写的。它确实降低了进入最低公分母的障碍,允许任何可以使用基本 HTTP(GET 和 POST(还有 PUT 和 DELETE 表示“正确”的方式))使用 API。

更多使用 REST 编写的公共 API 示例:twittervimeoGoogle

就期望使用您的 API 做任何事情的客户端而言,您做不到!您无法做任何事情来确保 API 的使用者会做任何正确的事情。这就是强大的错误处理如此重要的原因。您必须检查并仔细检查来自客户的所有内容。你必须始终怀疑它,甚至假设它是恶意的。这个事实真的没有什么好的办法。

更新 2:提交者在帖子中添加了以下内容:

我最初的想法是在 .NET 中创建一个 DLL 或程序集,然后客户端调用运行客户端的代码。该代码可以通过任何通信协议与服务器通信,但我的 API 将在他们的机器上运行。我猜 REST 并没有真正做到这一点。似乎在 REST 中,一切仍然是 HTTP 帖子。它几乎是没有肥皂的网络服务。

您当然可以这样做,但这仅适用于 .NET 语言,这意味着您无法获得跨平台和跨语言的好处。而且,最后,你真的在​​阻止任何事情吗?开发人员将使用您的远程 API,或者您的本地 DLL 或程序集。无论哪种方式,他都必须知道如何使用它并正确使用它,否则您将抛出错误。您真正要做的就是更改引发错误的位置。这可能对您很重要(如果是,请说明原因),但实际上并没有改变等式中的任何内容。

但是您说 REST 有点像没有 SOAP 的 Web 服务有点正确。从技术上讲,REST 也是 Web 服务,只是 Web 服务通常意味着 SOAP。这确实是实现相同目标的不同方式。最大的区别在于,虽然它需要更多的编程和思考(可能在客户端需要更多的编程),但是你用它来换取健壮性、消费者和服务器的开销更少,以及 API 的尽可能广泛的受众.它确实是最小的公分母。

【讨论】:

  • 我回复了你的回答。我喜欢这个主意,但我在想一些我可以控制的东西。
  • 太棒了。您应该会看到我对您的回复的回复;) HTH
【解决方案2】:

我建议用 Haxe 编程语言编写 API,以便源代码可以直接翻译成您提到的所有编程语言。 Haxe 编程语言可以翻译(或“反编译”)为您在原始帖子中提到的所有编程语言,以及其他一些语言。

【讨论】:

    【解决方案3】:

    我在 Web 服务方面处于早期阶段,但我认为关键点之一是许多工具支持基于 WDSL 等服务描述的客户端实现。

    我所做的任何事情都没有交付任何客户端软件,我希望任何用户都能够构建适合他们需求的自己的客户端。

    如果您按照其他答案之一的建议查看 flickr API,我认为他们不提供客户端代码,其他人已经构建并贡献了客户端的东西。

    【讨论】:

      【解决方案4】:

      简单的回答,不。

      复杂的答案:创建一个 API 并将其编译为 COM dll。然后,只需为无法处理的语言构建包装代码。

      简单的答案 #2,使原始服务如此微不足道,或者如此普遍接受,以至于不需要 API(我通常通过服务器端数据库轮询来实现这一点。丑陋但任何可以访问数据库的语言都可以利用程序)。

      【讨论】:

        猜你喜欢
        • 2010-09-13
        • 1970-01-01
        • 2013-06-19
        • 2013-09-13
        • 2011-08-20
        • 1970-01-01
        • 2018-03-29
        • 2014-06-27
        • 2014-08-03
        相关资源
        最近更新 更多