2009-01-13 54 views
11

我打算建立一个网络服务或其他一些通过互联网公开的服务。我想为应用程序创建一个API来与此服务交互。我希望API能够用于不同的语言,如Java,C++,C#或PHP。我如何为我的API维护一个代码库,但是为所有这些语言分发好的打包二进制文件?另外,我可能想考虑这也可能是跨平台的。语言不可知的API

更新1

我对Web服务的初期,但我 认为,关键点之一是 大量的模具支持基于的 描述 实施客户像WDSL这样的服务。 我没有交付任何客户端 软件与我所做的任何事情,我 期望任何用户能够建立自己的客户 适合其 需要。 --Brabster的答案

我不反对使它成为一个直接的Web服务,然后发出一个WSDL文件。但是,如果我想让客户端API执行一些逻辑,加密,错误检查等操作呢?

更新2

至于期待客户使用自己的API做任何事,你 不能是 !没有什么东西可以做 ,以确保API的消费者 能够做任何事。 这就是为什么健壮的错误处理很重要的原因。你必须检查并加倍 检查任何和所有来自客户端的 。您一定对 怀疑它,甚至认为 它是恶意的。这个事实确实没有什么好办法。 --Ryan Guill的答案

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

更新3

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

感谢您的所有输入。

+0

看到这个问题:http://programmers.stackexchange.com/questions/157536/how-can-i-write-a-set-of-functions-that-c​​an-be-invoked-from-almost-any - 程序 – 2012-07-21 20:54:29

回答

13

我会用一个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有很多固有的开销。我认为这就是为什么你看到使用REST编写越来越多的公共API。它真正降低了进入最低公共分母的障碍,允许任何可以使用基本HTTP(GET和POST(也是PUT和DELETE用于“正确”的方式))使用API​​。

公共API的使用REST写的一些例子:twittervimeoGoogle

至于预期正在使用您的API做任何事情,你不能在客户端!没有什么能够做到的,以确保API的使用者能够做正确的事情。这就是强大的错误处理如此重要的原因。您必须检查并仔细检查来自客户的任何和所有内容。你必须永远怀疑它,甚至认为它是恶意的。这个事实真的没有好的方法。

更新2:提交者添加了以下的帖子:

我最初的想法是建立在.NET DLL或组装,然后在客户端发出的呼叫到这个代码运行客户端。这段代码可以通过任何通信协议回到服务器,但是我的API将会在他们的盒子上运行。我猜REST并没有真正做到这一点。看起来在REST中,一切仍然是一个HTTP帖子。这是几乎没有肥皂的Web服务。

您当然可以做到这一点,但这只适用于.NET语言,这意味着您的跨平台和跨语言的好处不在窗口。最后,你真的阻止了什么吗?开发人员将使用您的远程API或您的本地DLL或程序集。无论哪种方式,他将不得不知道如何使用它并正确使用它,否则你会抛出一个错误。你所做的只是改变错误发生的位置。这可能对你很重要(如果是这样,请说明原因),但实际上并没有改变方程式中的任何内容。

但你是在说REST有些正确的是一种像无SOAP的Web服务。从技术上来说,REST也是Web服务,它只是Web服务通常意味着SOAP。这是实现同样目标的另一种方式。最大的区别在于它需要更多的编程和思考(并且可能在客户端有更多的编程),但是为了稳健性,消费者和服务器都需要更少的开销,以及API的最广泛的受众群体。它确实是最低的共同标准。

+0

我回答了你的回答。我喜欢这个主意,但是我想的是我有更多的控制权。 – 2009-01-14 15:09:51

2

我在Web服务的早期阶段,但我认为其中一个关键点是很多工具都支持基于服务描述(如WDSL)来实现客户端。

我还没有交付过任何客户端软件,我希望任何用户都能够构建适合他们需求的客户端。

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

+0

我回答了你的答案。 – 2009-01-14 15:10:28

0

简单的答案,没有。

复杂的答案:创建一个API并将其编译为COM DLL。然后,为不能处理的语言构建包装代码。

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

1

我建议写在HAXE编程语言的API,使源代码可以直接转换到你所提到的所有编程语言。 Haxe编程语言可以被翻译(或“trans-compile”)到您在原始文章中提到的所有编程语言以及其他一些编程语言。