Technical 技术

REST Web Services at a Glance

本文将简单介绍 RESTful Web Service,并使用 ASP.net 实现一个简单的 RESTful Web Service。

REST 是 Representational State Transfer 的缩写,它是一种用于搭建 Web Service 的一种架构风格。REST 的底层协议是 HTTP。基于 REST 风格搭建的 Web Service 叫做 RESTful Service。REST 架构被很多主流网站使用,包括 Google, Facebook 和 Twitter。

REST 是一种从某些环境中获取资源的方式。打个比方,某个服务器存放着很多重要的图片或者视频,这些图片和视频被称作为资源。假如客户端需要从服务器获取这些资源,比如说浏览器要访问这些资源,它必须要向服务器发出请求,而 REST 就定义了这些资源通过什么方式可以被请求到。

REST 的主要方法包括:POST,GET,PUT 和 DELETE。

  1. POST 用于在服务器中新建资源。
  2. GET 用于在服务器中取出资源。
  3. PUT 用于在服务器中更新资源。
  4. DELETE 用于在服务器中删除资源。

让我们来举一个形象的例子,假设服务器中有一条数据,某各学生的学号是 51。

  1. POST 方法对这条数据并不适用,因为 51 号学生这条数据已经被创立了。
  2. GET 可以用于获取 51 号学生的详细信息。
  3. PUT 可以用于更新 51 号学生的详细信息。
  4. DELETE 可以用于删除 51 号学生的详细信息。

REST 架构有如下几个特点:

  1. REST 的基本结构是 C/S。Server 端将提供 RESTful Web Service,因而 Client 端可以调用相关功能。Client 端向 Server 端发送相关请求, Server 端可以拒绝这个请求或者给出相应的回复。
  2. Client 提出的需求必须要确保完整,Server 要么处理请求要么拒绝请求,而不会去维护请求 – Server 不会记住 Client 的上一次请求。Server 和 Client 之间就是简单的请求 – 回答关系。
  3. 由于 Client 的每次请求是相互独立的,很多时候 Client 会向服务器提出同样的请求。这就增加了 Server 与 Client 之间的通讯量。因此在 Client 和 Server 之间会存在一个 Cache。 Cache 被部署在 Client 上,如果相同的请求已经被提出过, Client 将从 Cache 中查找而不是向 Server 重复请求。这样就大大减少了两者之间的 Traffic。

RESTful Web Service 可以通过多种编程语言实现。本文将使用 .Net 框架,在 VS2015 中新建一个 REST 应用。我们的 REST 应用将基于如下的数据集进行开发。

CompanyIdCompanyName
0Bosch
1DSA
2Actia

在我们的应用中,我们将部署如下的 RESTful 方法。

  1. GET Company – 当客户端调用这个 RESTful api 时,Server 端将回复整个公司列表。
  2. GET Company/CompanyId – 当客户端调用这个 RESTful API 时,Server 端将根据 ID 回复公司名称。
  3. POST Company/CompanyName – 客户端调用这个 RESTful API 时,Server 端将在数据集中添加这个公司名称。
  4. DELETE Company/CompanyId – 客户端调用这个 RESTful API 时,Server 端将更具 ID 删除对应的公司名称。

接下来我们打开 VS2015,创建第一个 RESTful Web Services。

STEP 1 – 在 VS2015 新建一个 Web 项目。

Create a new Web project.

STEP 2 – 右击 Project,点击 Add,新建一个 WCF Service (Ajax-enabled)。WCF 是Windows Communication Foundation 的缩写,是提供如 TCP,HTTP,HTTPS 通讯平台的库。AJAX 是 Asynchronous JavaScript and XML 的缩写, 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

Add WCF Service (Ajax-enabled)

STEP 3 – 打开项目中的 Web.config,将 <enableWebScript /> 改为 <webHttp />。

Configure Web.config

STEP 4 – 下面开始部署我们的代码,所有的代码将会放在 CompaniyService.svc 里面。首先定义一个 List,里面有着三个字符串 “Bosch” , “DSA”, “Actia”。这是通过 Web Service 可以请求到的三家公司的名称。

Create a List

STEP 5 – 开始部署 GET 方法。依然是放在 CompanyService.svc 中。如果 Client 请求获取所有的公司名称列表,下面这段代码将实现这个功能。

代码解释 – 第一行的 WebGet attribute 是用来定影请求的 URL 的。如果 Web Service 的链接是 http://localhost:1234/CompanyService.svc,那么在这里 GET 方法的 URL 就是 http://localhost:1234/CompanyService.svc/Company。

STEP 6 – 部署通过 ID 来 GET 公司名称的方法。当 Client 调用该方法时, Server 会根据请求中的 ID 返回对应的公司名称。代码如下。

代码解释 – 同样第一行定义了请求的 URL。{ } 内的便是公司 ID。假设我们想 GET 1号公司的名称,即调用请求 http://localhost:1234/CompanyService.svc/Company/1。

STEP 7 -接下来我们部署 POST 方法。这个方法用于在我们的数据集中添加新的公司。比如我们新加一个公司叫 “Mahle”,那我们就需要调用 POST 方法。代码如下

代码解释 – WebInvoke 是用来允许 Client 调用 POST 方法。RequestFormat 和 ResponseFormat 用来定义请求和答复的文件格式,在这边都是 Json。

STEP 8 – 最后我们来部署 DELETE 方法。这个方法将用于删除数据集中的任意一条数据。代码如下。

代码解释 – WebInvoke 是用来允许 Client 调用 DELETE 方法。RequestFormat 和 ResponseFormat 用来定义请求和答复的文件格式,在这边都是 Json。

至此,第一个 REST 应用程序已经完成,我们来测试一下这个应用。

STEP 9 – 右击项目,点击 Set As Start Project。选择合适的浏览器,点击运行。

STEP 10 – 在对应浏览器中,访问我们在程序中设置的 URL。

Get Company List
Get Company Name by ID
Subscribe
Notify of
guest
2 Comments
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
grolyrtolemcs
4 years ago

Very nice post. I just stumbled upon your weblog and wished to say that I have truly enjoyed browsing your blog posts. After all I will be subscribing to your rss feed and I hope you write again very soon!

Cordia Rannels
4 years ago

Just wanna input that you have a very nice web site, I like the pattern it actually stands out.

2
0
Would love your thoughts, please comment.x
()
x