什么是Web服务端点?

341
假设我的Web服务位于http://localhost:8080/foo/mywebservice,WSDL位于http://localhost:8080/foo/mywebservice?wsdlhttp://localhost:8080/foo/mywebservice是一个端点吗?即它是否与我的Web服务的URI相同或者是接收和取消打包SOAP消息的地方?
请您解释一下它是什么以及其目的是什么。
7个回答

436

以下是更简明易懂的回答:

是的,端点是客户端应用程序可以访问您的服务的URL。同一个Web服务可以有多个端点,例如为了使用不同的协议而使其可用。


9
不,网站不是网络服务。网络服务主要由应用程序使用,而网站主要是为人类服务的。 - lbalazscs
4
终端点是客户端应用程序可以访问您的网络服务的URL。如果您不了解什么是网络服务,请阅读例如此文:https://dev59.com/rHVC5IYBdhLWcg3wpS3f - lbalazscs
1
我也点赞,并且有一个问题:为什么不直接称之为“基本URI”,而要称之为所谓的“终端点”?在“终端点”和“基本URI”之间是否存在根本区别?谢谢。 - Withheld
2
从概念上讲,端点和其地址之间存在差异,但在实践中通常指的是地址,因为通常需要使用“端点”来配置客户端以查找服务。 - lbalazscs
3
@lbalazscs - http://IP-Address:8080/foo/ShoppingWebservice/Toys,http://IP-Address:8080/foo/ShoppingWebservice/Books等。 - "/Toys"、"/Books"这部分叫什么?它们也被称为端点或资源吗? - MasterJoe
显示剩余2条评论

46

从评论中的Peter更新的答案如下:

这是"旧术语",直接使用WSDL2 "endpoint"定义(WSDL2将“port”翻译为“endpoint”)。


也许您能在此文档中找到答案:http://www.w3.org/TR/wsdl.html

WSDL文档将服务定义为网络端点或端口的集合。在WSDL中,端点和消息的抽象定义与它们的具体网络部署或数据格式绑定分离。这允许重用抽象定义:消息是交换的数据的抽象描述,而端口类型是操作的抽象集合。特定端口类型的具体协议和数据格式规范构成可重复使用的绑定。通过将网络地址与可重用的绑定相关联来定义端口,并且一组端口定义了一个服务。因此,WSDL文档在网络服务定义中使用以下元素:

  • Types– 使用某些类型系统(例如XSD)的数据类型定义容器。
  • Message– 传递的数据的抽象和类型定义。
  • Operation– 服务支持的操作的抽象描述。
  • Port Type–由一个或多个端点支持的操作的抽象集合。
  • Binding– 特定端口类型的具体协议和数据格式规范。
  • Port– 使用绑定和网络地址的组合定义的单个端点。
  • Service– 相关端点的集合。

http://www.ehow.com/info_12212371_definition-service-endpoint.html

端点是暴露 HTML 文件或活动服务器页面的连接点。端点提供了寻址 Web 服务端点所需的信息。端点提供了一个引用或规范,用于定义一组或系列的消息寻址属性和给予端到端消息特性,例如端点来源和目标的参考以及允许 "独立" 消息的统一寻址的消息标识。端点可以是个人电脑、PDA 或销售终端。


75
端点提供寻址 Web 服务端点所需的信息。 - musaul
2
这是“旧术语”,直接使用WSDL2“端点”定义(WSDL2将“port”翻译为“endpoint”)。 - Peter Krauss

36
一个 Web 服务端点是另一个程序与你的程序通信所使用的 URL。要查看 WSDL,需要在 Web 服务端点 URL 后添加 ?wsdl
Web 服务用于程序间互动,而网页用于人机互动。
因此: 端点是:http://www.blah.com/myproject/webservice/webmethod 所以, WSDL 是:http://www.blah.com/myproject/webservice/webmethod?wsdl
为了更深入地扩展 WSDL 的元素,我总是发现将它们与代码进行比较很有帮助:
WSDL 有两个部分 (物理和抽象)。 物理部分: 定义 - 变量 - 如:myVar、 x、 y 等。
类型 - 数据类型 - 如:int、double、String、myObjectType。
操作 - 方法/函数 - 如:myMethod()、myFunction() 等。
消息 - 方法/函数输入参数和返回类型。
例如:public myObjectType myMethod(String myVar) 端口类型 - 类(即它们是操作的容器) - 如:MyClass{} 等。 抽象部分: 绑定 - 它们连接到端口类型,并定义用于与此 Web 服务通信的所选协议。 - 协议是一种通信形式(文字/SMS、电话 vs. 电子邮件等)。
服务 - 这列出了另一个程序可以找到你的 Web 服务的地址(即你的端点)。

5
我发现“网络服务用于程序对程序之间的交互,而网页用于程序对人类之间的交互”这个说法非常有用,可以帮助我理解为什么不直接将终点作为URL调用。 - soMuchToLearnAndShare

14

在我之前参与的项目中,终端点是一个相对属性。也就是说,它可能已经被附加,但它始终包含 protocol://host:port/partOfThePath

如果调用的服务有一个动态部分(例如 ?param=dynamicValue),那么该部分将添加到终端点中。但很多时候,终端点可以直接使用而不需要进行修改。

重要的是要理解终端点是什么以及它如何起作用。例如,传递存储在终端点中的信息的另一种方法是将终端点的不同部分存储在单独的属性中。例如:

hostForServiceA=someIp
portForServiceA=8080
pathForServiceA=/some/service/path
hostForServiceB=someIp
portForServiceB=8080
pathForServiceB=/some/service/path

或者如果多个服务共享相同的主机和端口:

host=someIp
port=8080
pathForServiceA=/some/service/path
pathForServiceB=/some/service/path
在这些情况下,您的代码需要构建完整的URL,如下所示:
String url = "http://" + host + ":" + port + pathForServiceA  + "?" + dynamicParam + "=" + dynamicValue;

相反,在合同中,这可以被存储为一个终点

serviceAEndpoint=http://host:port/some/service/path?dynamicParam=

是的,很多时候我们将终点存储为包括'='在内的内容。这导致了像下面这样的代码:

String url = serviceAEndpoint + dynamicValue;

希望这能给你带来一些启示。


8
简单来说,端点是通信渠道的一端。当API与另一个系统交互时,此通信的接触点被视为端点。对于API,端点可以包括服务器或服务的URL。每个端点都是API可以访问其所需资源以执行其功能的位置。
API使用“请求”和“响应”进行工作。当API从Web应用程序或Web服务器请求信息时,它将收到响应。API发送请求和资源所在的位置称为端点。

Reference: https://smartbear.com/learn/performance-monitoring/api-endpoints/


7
一个"Endpoint"通常是指一个相对或绝对的URL地址,这个地址可以返回一个响应结果。该响应结果通常是由服务器端处理而来的,比如生成一个JSON字符串。然后,调用该"Endpoint"的应用程序就可以消费这个字符串。一般来说,"Endpoints"是预定义的访问点,在TCP/IP网络中用于启动进程和/或返回响应。"Endpoints"可以包含通过URL传递的参数,例如键值对。多个键值对之间使用"&"符号分隔,允许"Endpoint"调用更新/插入过程;因此,"Endpoints"并不总是需要返回响应,但响应始终是有用的,即使仅用于指示操作的成功或失败。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接