Web Services-网络服务

概念

  在理解Web服务之前,我想我们需要理解什么是Service(服务),在经济学中服务区别于产品,即我们所说的第三产业。产品是属于有形的可以保存的财产;但服务是在产品制成后,利用这些产品去赚取利益。那么在计算机中,服务又是什么,通常我们把计算机中的服务认为是一种在后台运行的应用程序类型。

  由于服务来源的不同,我们又可以把服务分为两种:本地服务(本地计算机提供的服务,不需要网络)和网络服务(另一台计算机提供的服务,需要网络)。

  比如网上报名需要jpg格式的图片文件,但是手头的照片格式是png格式的。所以需要转换一下格式,如果在自己的计算机上转换格式的话,可以看作是本地服务;如果在网上找了一个提供图片格式转换服务的网站进行转换的话,提交png格式的图片,它会返回jpg格式的图片,可以看作是网络服务。

  Web Services(网络服务)让我们可以通过网络调用其它机器上的资源。

实现方式

  广义的Web Services更多的是一种概念,是对远程网络资源调用的一种描述,提供网络服务的方法通常被认为有三种:

RPC

  Remote Procedure Call(远程过程调用),RPC就是要像调用本地函数一样去调用远程函数,先来看看如何完成一个本地函数的调用:

int add(int x,int y)
{
    return x + y;
}

int a = 1;
int b = 1;
int result = add(a,b);

  add函数的执行流程大致为:

  1. 分别将变量a、b的值压入栈
  2. 执行add函数,从栈中取出a、b的值赋值给x、y
  3. 计算x+y的值,并保存在栈中
  4. 退出add函数,将x+y的值赋值给result

  本地过程调用发生在同一个进程,共享内存区域,但是RPC通信需要跨过不同的机器,不同的进程,因此需要解决几个问题:

  • 函数ID:第一个需要解决的问题是如何定位函数的位置,如何告诉远程服务器调用的是哪个函数?在本地调用中,通过函数指针来指定函数体,调用add函数,编译器会自动通过函数指针确定add函数在内存中的位置。但是在RPC中,无法通过函数指针来完成调用,因为它们的内存地址可能是完全不同的。所以调用方和被调用方同时需要维护一个{函数<->ID}的映射表,来保证调用到正确的函数。

  • 序列化、反序列化:本地过程调用中传参是通过栈内存结构来实现的,但是RPC并不能直接使用内存来传递参数,因此传输过程中需要把参数或者返回值序列化,转化为字节流,反之为反序列化。

  • 网络传输:函数的调用方和被调用方通常是通过网络连接的,也就是说函数ID、序列化之后的字节流都需要通过网络传输,因此并不局限与某种网络协议,只要可以完成传输即可。比如有的RPC框架使用TCP协议、有的使用HTTP。

RMI

  Remote Method Invocation,远程方法调用。它使得一个Java虚拟机可以调用另一个Java虚拟机中的方法,仅限于Java平台,API主要在 java.rmi 包中。RMI可以看做是RPC在Java平台下的一个实现。

RPC框架

  市场上开源的RPC框架有不少,比如国内非常有名的dubbo(阿里开源,已经捐献给Apache基金会,孵化中),国外有Google的gRPC以及Facebook的Thrift等。

SOA

  Service-oriented architecture,面向服务架构。请注意,这里的SOA不特指某种技术,而是软件设计方法,正如文章主题Web Services一样,是广义上的网络服务概念,同样也不特指某种技术。


image.png | center | 230x142

  如果说RPC是以函数(方法)为主体,由动作驱动。那么在SOA中,主体是服务,由消息驱动。与RPC方式的最大差别在于,SOA方式更加关注如何去连接服务而不是特定某个实现的细节。

REST

  表现层状态转换(REST,Representational State Transfer)是Roy Thomas Fielding博士于2000年在他的博士论文中提出来的一种网络软件设计风格,提供REST风格的web API称为RESTful API。


image.png | center | 640x219

  RESTful API 主要有以下特点:

  • 每一个URL代表一个网络资源,也就是说URL是由名词组成的
  • 对于资源的操作是通过HTTP协议中的请求方法来完成的

  一个传统API的设计可能是这样:

https://bookstore.com/getBook
https://bookstore.com/deleteBook

  RESTful API 为:

//查询所有图书
GET https://bookstore.com/Book
//查询某本图书
GET https://bookstore.com/Book/1111
//删除所有图书
DELETE https://bookstore.com/Book

  对于某一个资源通常有增删改查四种方式,HTTP分别有不同的方法与之对应:

方法 动作
GET 查询
POST 添加
PUT 更新
DELETE 删除

小结

  Web Services,SOA,RPC、RMI其相关的概念与技术非常之多,很多没有明确的定义,并且概念之间非常相近,很混乱但是又没有一个完整的概念体系来整理他们,因此学习的时候一定要进行梳理,形成自己的知识网络。本文提到的Web Services主要指其广义上的概念——网络服务,而非具体的技术实现。狭义上的Web Services指的是W3C定义的技术集合,比如SOAP、WSDL等。

参考资料

  1. Web服务
  2. Introduction to Web Services
  3. Web service是什么?

猜你喜欢

转载自blog.csdn.net/u013201439/article/details/80462871