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。
- POST 用于在服务器中新建资源。
- GET 用于在服务器中取出资源。
- PUT 用于在服务器中更新资源。
- DELETE 用于在服务器中删除资源。
让我们来举一个形象的例子,假设服务器中有一条数据,某各学生的学号是 51。
- POST 方法对这条数据并不适用,因为 51 号学生这条数据已经被创立了。
- GET 可以用于获取 51 号学生的详细信息。
- PUT 可以用于更新 51 号学生的详细信息。
- DELETE 可以用于删除 51 号学生的详细信息。
REST 架构有如下几个特点:
- REST 的基本结构是 C/S。Server 端将提供 RESTful Web Service,因而 Client 端可以调用相关功能。Client 端向 Server 端发送相关请求, Server 端可以拒绝这个请求或者给出相应的回复。
- Client 提出的需求必须要确保完整,Server 要么处理请求要么拒绝请求,而不会去维护请求 – Server 不会记住 Client 的上一次请求。Server 和 Client 之间就是简单的请求 – 回答关系。
- 由于 Client 的每次请求是相互独立的,很多时候 Client 会向服务器提出同样的请求。这就增加了 Server 与 Client 之间的通讯量。因此在 Client 和 Server 之间会存在一个 Cache。 Cache 被部署在 Client 上,如果相同的请求已经被提出过, Client 将从 Cache 中查找而不是向 Server 重复请求。这样就大大减少了两者之间的 Traffic。
RESTful Web Service 可以通过多种编程语言实现。本文将使用 .Net 框架,在 VS2015 中新建一个 REST 应用。我们的 REST 应用将基于如下的数据集进行开发。
CompanyId | CompanyName |
0 | Bosch |
1 | DSA |
2 | Actia |
在我们的应用中,我们将部署如下的 RESTful 方法。
- GET Company – 当客户端调用这个 RESTful api 时,Server 端将回复整个公司列表。
- GET Company/CompanyId – 当客户端调用这个 RESTful API 时,Server 端将根据 ID 回复公司名称。
- POST Company/CompanyName – 客户端调用这个 RESTful API 时,Server 端将在数据集中添加这个公司名称。
- DELETE Company/CompanyId – 客户端调用这个 RESTful API 时,Server 端将更具 ID 删除对应的公司名称。
接下来我们打开 VS2015,创建第一个 RESTful Web Services。
STEP 1 – 在 VS2015 新建一个 Web 项目。
STEP 2 – 右击 Project,点击 Add,新建一个 WCF Service (Ajax-enabled)。WCF 是Windows Communication Foundation 的缩写,是提供如 TCP,HTTP,HTTPS 通讯平台的库。AJAX 是 Asynchronous JavaScript and XML 的缩写, 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
STEP 3 – 打开项目中的 Web.config,将 <enableWebScript /> 改为 <webHttp />。
STEP 4 – 下面开始部署我们的代码,所有的代码将会放在 CompaniyService.svc 里面。首先定义一个 List,里面有着三个字符串 “Bosch” , “DSA”, “Actia”。这是通过 Web Service 可以请求到的三家公司的名称。
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。
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!
Just wanna input that you have a very nice web site, I like the pattern it actually stands out.