如何为我们的系统提供 API [关闭]

Posted

技术标签:

【中文标题】如何为我们的系统提供 API [关闭]【英文标题】:how to provide API for our system [closed] 【发布时间】:2009-05-14 18:59:38 【问题描述】:

我在 Web 服务或 API 方面没有太多经验。

我们有一个基于 Oracle->Sun App Server->Java->Struts2 框架的网站。我们需要为我们的系统提供 API。此 API 将被我们系统之外的其他系统使用。 API 仅适用于我们数据库中的一个简单 SP。另一个系统不想连接到我们的数据库来获得对 SP 的访问权限,而是将 API 作为“网络服务”

能否请社区提供一些关于如何解决此问题的信息? API 会放在我们的网络服务器上吗?那是其他系统将如何连接到它的方式吗?以及如何创建公共 API?

【问题讨论】:

用户能够与 servlet 进行通信就足够了吗,还是他们想要一个 Web 服务接口? 能够与 servlet 通信应该没问题。我不确定您所说的网络服务接口到底是什么意思。但只要他们不必在他们这边安装东西就可以了。 【参考方案1】:

您需要考虑的一些事情是:

SOAP 与 REST (Why would one use REST instead of SOAP based services?) 您将如何处理身份验证? 是否需要扩展?

您可能想看看https://jersey.dev.java.net/。

看看另一家公司是如何做到的也会有所帮助,请查看http://www.flickr.com/services/api/ 了解一些想法。

【讨论】:

【参考方案2】:

如果您使用的是 Sun App Server,将 EJB 公开为带有 @WebService 标记的 Web 服务,然后让该 EJB 调用存储过程并返回数据应该是相当简单的。应用服务器为您提供了发布 WSDL 的工具,他们将使用该工具来了解如何调用您的 API。

话虽如此,在 50,000 英尺处听起来很容易,但处理所有细节确实很痛苦。首先,安全性如何?其次,是否真的需要 WebServices,或者是否有更好的更明显的通信机制,例如(至少)REST,如果不是一些简单的 servlet 通信。最难的部分:您将以什么格式返回这个结果集?

无论如何,您可能会在这里处理一些政治问题(“什么,您不知道如何提供 Web 服务,每个人都知道,等等”),因此可能有点难以探究要求。好消息是,在最新的 Java EE 中发布 Web 服务非常简单(比使用 Web 服务容易得多)。坏消息是细节将是一个杀手。例如,我见过有经验的 Web 服务开发人员在命名空间问题上花费数小时。

【讨论】:

谢谢。我有几个问题。如果将 EJB 公开为 Web 服务,该 EJB 是否也会放在 AppServer 上以供他们连接?我会尝试以某种方式提出要求,所以我听起来我不知道 web 服务 :) 另外,我发现了一些东西,展示了如何将 servlet 变成 web 服务 (netbeans.org/kb/55/websvc-jax-ws.html#Exercise_3_2)。 是的,应用服务器将是托管 EJB 并使 Web 服务可用的服务器。它将完成所有繁重的工作,您只需一个带注释的类。 您提供的链接用于使用 Web 服务。这意味着调用它,这就是您的客户/客户将要做的事情。您将创建一个网络服务,该页面的相关部分在这里:netbeans.org/kb/55/websvc-jax-ws.html#Exercise_1【参考方案3】:

肥皂或休息或.. 是奖牌的一方面,取决于客户想要什么。 另一个(更)重要的是 api 设计本身。它应该是无状态的还是有状态的。客户端是位于同一个虚拟机(Appserver)中还是远程在同一个 LAN 中,甚至是在一个 Wan 中。 一旦通信通过线路,由于序列化,它会变慢。因此,您希望 API 方法一次获取更大(但不是太大)的数据块。

或者换句话说,如果你不知道更多关于你想要做什么和需要做什么,你的问题就无法真正得到回答。

【讨论】:

以上是关于如何为我们的系统提供 API [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Java、C# 和 C++ 中一个项目的不同实现管理一份一致的文档? [关闭]

我们如何为 64 位操作系统设置 oledb 提供程序

如何为 ZuulException 自定义 Spring Boot 控制器 API 响应

spring @Value如何为变量java赋值[关闭]

如何为网站设置负载/压力测试? [关闭]

如何为 C++ 程序提供测试用例,如果 QA 部门。拒绝吗? [关闭]