web service restful框架 教程

什么是Restful Web Service?

REST用于构建轻量级,可维护性和可伸缩性的Web服务。基于REST架构的服务称为RESTful服务。REST的基础协议是HTTP,它是基本的Web协议。REST代表REpresentational State Transfer

RESTful关键元素

自成立以来,Web服务确实走过了漫长的道路。2002年,Web联盟发布了WSDL和SOAP Web服务的定义。这形成了Web服务实现方式的标准。

2004年,Web联盟还发布了一个名为RESTful的附加标准的定义。在过去的几年里,这个标准已经变得非常流行。并且被世界上许多流行的网站使用,包括Facebook和Twitter。

REST是一种访问特定环境中的资源的方法。例如,您可以拥有一个可以托管重要文档或图片或视频的服务器。所有这些都是资源的一个例子。如果客户端(例如Web浏览器需要这些资源中的任何一个),它必须向服务器发送请求以访问这些资源。现在,REST定义了如何访问这些资源的方法。

RESTful实现的关键元素如下:

  1. 资源 - 第一个关键元素是资源本身。假设服务器上的Web应用程序具有多个员工的记录。我们假设Web应用程序的URL是http://demo.guru99.com。现在,为了通过REST访问员工记录资源,可以发出命令http://demo.guru99.com/employee/1 - 此命令告诉Web服务器请提供员工编号为1的员工的详细信息。

  2. 请求动词 - 这些描述了您要对资源执行的操作。浏览器发出GET动词来指示它想要获取数据的端点。但是,还有许多其他动词可用,包括POST,PUT和DELETE。因此,在示例http://demo.guru99.com/employee/1的情况下,Web浏览器实际上是发布GET Verb,因为它想要获取员工记录的详细信息。

  3. 请求标头 - 这些是随请求一起发送的附加说明。这些可能会定义所需的响应类型或授权详细信息。

  4. 请求正文 - 数据随请求一起发送。当向REST Web服务发出POST请求时,通常会在请求中发送数据。在POST调用中,客户端实际上告诉Web服务它想要将资源添加到服务器。因此,请求主体将具有需要添加到服务器的资源的细节。

  5. 响应主体 - 这是响应的主体。因此,在我们的示例中,如果我们通过请求http://demo.guru99.com/employee/1查询Web服务器,Web服务器可能会返回一个XML文档,其中包含响应正文中员工的所有详细信息。

  6. 响应状态代码 - 这些代码是与Web服务器响应一起返回的通用代码。一个例子是代码200,如果在向客户端返回响应时没有错误,则通常返回代码200。

宁静的方法

下图显示了大部分动词(POST,GET,PUT和DELETE)以及它们的含义示例。

假设我们在该位置定义了RESTful Web服务。http://demo.guru99.com/employee。当客户端向此Web服务发出任何请求时,它可以指定GET,POST,DELETE和PUT的任何正常HTTP谓词。如果相应的动词是由客户发送的,下面是会发生什么。

  1. POST - 这将用于使用RESTful Web服务创建新员工
  2. GET - 这将用于获取使用RESTful Web服务的所有员工的列表
  3. PUT - 这将用于使用RESTful Web服务更新所有员工
  4. DELETE - 这将用于删除使用RESTful Web服务的所有员工

让我们从一个单一记录的角度来看一看。假设有员工记录,员工编号为1。

以下行为具有各自的含义。

  1. POST - 这不适用,因为我们正在获取已创建的员工1的数据。
  2. GET - 这将用于使用RESTful Web服务获取Employee no为1的员工的详细信息
  3. PUT - 这将用于使用RESTful Web服务更新Employee no为1的员工的详细信息
  4. DELETE - 用于删除Employee no为1的员工的详细信息

web service restful框架 教程

为什么要休息

由于以下原因,Restful大多受欢迎:

  1. 异构语言和环境 - 这也是我们在SOAP中看到的基本原因之一。
  • 它使基于各种编程语言构建的Web应用程序能够相互通信
  • 在Restful服务的帮助下,这些Web应用程序可以驻留在不同的环境中,一些可以在Windows上,另一些可以在Linux上。

但最终,无论环境如何,最终结果应该始终相同,以至于他们应该能够相互交谈。宁静的Web服务为构建在各种编程语言和平台上的应用程序提供了这种灵活性,可以相互通信。

下图给出了一个Web应用程序的示例,该应用程序需要与Facebook,Twitter和Google等其他应用程序进行通信。

 

现在,如果客户端应用程序必须与Facebook,Twitter等网站合作,他们可能必须知道Facebook,Google和Twitter的语言是什么,以及它们构建在什么平台上。

基于此,我们可以为我们的Web应用程序编写接口代码,但这可能会成为一场噩梦。

Facebook,Twitter和Google以Restful Web服务的形式公开其功能。这允许任何客户端应用程序通过REST调用这些Web服务。

web service restful框架 教程

  1. 设备事件 - 如今,一切都需要在移动设备上运行,无论是移动设备,笔记本电脑,还是汽车系统。

    您能想象尝试在这些设备上编写应用程序以与普通Web应用程序通信的努力程度吗?同样,Restful API可以使这项工作更简单,因为如第1点所述,您实际上不需要知道设备的底层是什么。

  2. 最后是云的事件 - 一切都在向云迁移。应用程序正在慢慢迁移到基于云的系统,例如Azure或Amazon。Azure和Amazon提供了许多基于Restful架构的API。因此,现在需要以与云兼容的方式开发应用程序。因此,由于所有基于云的体系结构都基于REST原则,因此在基于REST的体系结构上编程Web服务更有意义,以充分利用基于云的服务。

宁静的建筑

被认为是RESTful或REST风格的应用程序或体系结构具有以下特征

  1. 状态和功能分为分布式资源 - 这意味着每个资源都应该可以通过GET,POST,PUT或DELETE的常规HTTP命令访问。因此,如果有人想从服务器获取文件,他们应该能够发出GET请求并获取文件。如果他们想在服务器上放置文件,他们应该能够发出POST或PUT请求。最后,如果他们想从服务器删除文件,他们就会发出DELETE请求。
  2. 该体系结构是客户端/服务器,无状态,分层,并支持缓存 -
  • 客户端 - 服务器是典型的体系结构,其中服务器可以是托管应用程序的Web服务器,并且客户端可以像Web浏览器一样简单。
  • 无状态意味着应用程序的状态不在REST中维护。

    例如,如果使用DELETE命令从服务器中删除资源,则不能指望将删除信息传递给下一个请求。

    为了确保删除资源,您需要发出GET请求。GET请求将用于首先获取服务器上的所有资源。之后需要查看资源是否实际被删除。

RESTFul原则和约束

REST架构基于以下详细说明的一些特征。任何RESTful Web服务都必须符合以下特征才能将其称为RESTful。这些特性也称为在使用基于RESTful的服务时需要遵循的设计原则。

  1. RESTFul客户端 - 服务器

    web service restful框架 教程

这是基于REST架构的最基本要求。这意味着服务器将具有RESTful Web服务,该服务将为客户端提供所需的功能。客户端向服务器上的Web服务发送请求。服务器将拒绝请求或遵守请求并向客户端提供足够的响应。

  1. 无状态

无状态的概念意味着由客户端确保将所有必需的信息提供给服务器。这是必需的,以便服务器可以适当地处理响应。服务器不应在来自客户端的请求之间维护任何类型的信息。这是一个非常简单的独立问答序列。客户端提出问题,服务器会正​​确回答。客户会问另一个问题。服务器将不记得上一个问答场景,需要独立回答新问题。

  1. 高速缓存

web service restful框架 教程

Cache概念是为了帮助解决最后一点中描述的无状态问题。由于每个服务器客户端请求本质上是独立的,因此有时客户端可能会再次向服务器请求相同的请求。即使它过去已经要求它了。此请求将转到服务器,服务器将给出响应。这会增加整个网络的流量。缓存是在客户端上实现的概念,用于存储已经发送到服务器的请求。因此,如果客户端给出相同的请求,而不是去服务器,它将转到缓存并获取所需的信息。这样可以节省从客户端到服务器的网络流量。

  1. 分层系统

分层系统的概念是可以在客户端和托管RESTFul Web服务的实际服务器之间插入任何附加层(如中间件层)(中间件层是创建所有业务逻辑的地方。这可以是额外的服务在调用Web服务之前,客户端可以与之交互。但是这个层的引入需要透明,这样才不会干扰客户端和服务器之间的交互。

  1. 接口/统一合同

这是RESTful Web服务应该如何工作的基础技术。RESTful基本上可以在HTTP Web层上运行,并使用以下关键动词来处理服务器上的资源

  • POST - 在服务器上创建资源
  • GET - 从服务器检索资源
  • PUT - 更改资源状态或更新资源状态
  • DELETE - 从服务器中删除或删除资源

在ASP.NET中创建您的第一个Restful Web服务

可以使用各种语言创建Web服务。许多集成开发环境可用于创建基于REST的服务。

在此示例中,我们将使用Visual Studio在.Net中创建REST应用程序。在我们的示例中,对于Restful Web服务,我们将模拟以下示例。

我们将有一个Restful Web服务,它将处理以下数据集。

 

下面的数据集代表了一个公司的例子,该公司公开了他们基于Tutorialid的教程。

Tutorialid TutorialName
0 数组
1 队列
2 堆栈

在我们的例子中,我们将实现下面的Restful Verbs。

  1. GET教程 - 当客户端调用此Restful API时,他们将获得Web服务提供的整套教程。
  2. GET Tutorial / Tutorialid - 当客户端调用此Restful API时,将根据客户端发送的Tutorialid给出教程名称。
  3. POST Tutorial / Tutorialname - 当客户端调用此Restful API时,客户端将提交插入Tutorialname的请求。然后,Web服务将提交的Tutorial名称添加到集合中。
  4. DELETE Tutorial / Tutorialid-当客户端调用此Restful API时,客户端将根据Tutorialid提交删除Tutorialname的请求。然后,Web服务将从集合中删除提交的教程名称。

让我们按照以下步骤创建我们的第一个RESTful Web服务,该服务执行上述实现。

步骤1)第一步是创建一个空的Asp.Net Web应用程序。从Visual Studio 2013中,单击菜单选项File-> New project。

web service restful框架 教程

单击“新建项目”选项后,Visual Studio将为您提供另一个对话框,用于选择项目类型并提供项目的必要详细信息。这将在下一步中解释

步骤2)在这一步中,

  1. 确保首先选择ASP.NET Web应用程序的C# Web模板。项目必须属于此类型才能创建Web服务项目。通过选择此选项,Visual Studio将执行必要的步骤以添加任何基于Web的应用程序所需的所需文件。
  2. 给你的项目命名,在我们的例子中,它被命名为“Webservice.REST”。
  3. 然后确保提供一个位置,项目文件将存储在该位置。

web service restful框架 教程

完成后,您将看到在Visual Studio 2013中的解决方案资源管理器中创建的项目文件。

web service restful框架 教程

步骤3)下一步是创建将具有RESTful Web服务的Web服务文件

  1. 首先右键单击项目文件,如下所示

web service restful框架 教程

  1. 在这一步中,
    1. 右键单击项目文件
    2. 选择“添加 - >新项目”选项。

web service restful框架 教程

在出现的对话框中,您需要执行以下操作

  1. 选择WCF服务选项(启用Ajax) - 选择此类型的文件,它会使Visual Studio添加一些基本代码,这有助于创建一个RESTful Web服务。WCF代表Windows Communication Foundation。WCF是一个库,用于各种平台或同一平台的应用程序,以通过各种协议(如TCP,HTTP,HTTPS)进行通信。Ajax基本上是异步JavaScript和XML。AJAX允许通过在幕后与服务器交换少量数据来异步更新网页。
  2. 接下来给出服务的名称,在我们的例子中是TutorialService。
  3. 最后,单击“添加”按钮将服务添加到解决方案中。

web service restful框架 教程

步骤4)下一步是实际进行配置更改,以使该项目能够完成RESTful Web服务的工作。这需要对名为Web.config的文件进行更改。此文件显示在与Webservice项目文件相同的窗口中。Web.config文件包含使Web应用程序正常工作的所有配置。实际进行的更改允许应用程序作为纯RESTful Web服务发送和接收数据。

  1. 单击Web.config文件以打开代码

web service restful框架 教程

  1. 查找<enableWebScript>行

web service restful框架 教程

  1. 将行更改为<webHttp>

web service restful框架 教程

 

步骤5)下一步是添加我们的实现代码。所有下面提到的代码都必须写在TutorialService.svc文件中

  1. 第一点是添加代码来表示将在我们的程序中使用的数据。所以我们将得到一个字符串变量列表,其值为“Arrays”,“Queues”和“Stacks”。这将代表通过我们的托管Web服务提供的教程名称。

web service restful框架 教程

名称空间Webservice.REST
{
	[SenviceContnact(Namespace =“”)]
	[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed
	公共类TutorialService
	{
		私有静态列表 1st =新名单 
		(new String [] {“Arrays”,“Queues”,“Stacks”});

步骤6)接下来,我们将定义GET方法的代码。此代码也将驻留在相同的TutorialService.svc文件中。每当我们从浏览器调用服务时,此代码就会运行。

以下方法将用于实现下面提到的方案

  • 如果用户想要所有可用教程的列表,则需要编写以下代码来完成此操作。

web service restful框架 教程

[WebGet(UriTemplate = “/教程”)]

public String GetAllTutorial()
{
	int count = 1st.Count;
	String TutorialList =“”;
	for(int i = 0; i <count; i ++)
	TutorialList = TutorialList + lst [i] +“,”;
	return TutorialList;
}

代码说明: -

  1. 第一行代码是最重要的。它用于定义我们如何通过URL调用此方法。因此,如果指向我们的Web服务的链接是http:// localhost:52645 / TutorialService.svc,并且如果我们将“/ Tutorial”附加到URL作为http:// localhost:52645 / TutorialService.svc / Tutorial,则上面的代码将被调用。“WebGet”的属性是一个参数,它允许此方法成为RESTful方法,以便可以通过GET动词调用它。
  2. 这部分代码用于遍历'lst'变量中的字符串列表,并将所有字符串返回给调用程序。

步骤7)下面的代码确保如果使用Tutorial id对Tutorial Service进行GET调用,那么它将根据Tutorial id返回相应的Tutorial Name。

web service restful框架 教程

[WebGet(UriTemplate =“/ Tutorial / {Tutorialid}”)]

public String GetTutorialbyID(String Tutorialid)
{
	int pid;
	Int32.TryParse(Tutorialid,out pid);
	return lst [pid];
}

代码说明: -

  1. 第一行代码是最重要的。它用于定义我们如何通过URL调用此方法。因此,如果指向我们的Web服务的链接是http:// localhost:52645 / TutorialService.svc,并且如果我们将“/ Tutorial / {Tutorialid}”附加到URL,那么我们就可以将Web服务称为http: //localhost:52645/TutorialService.svc/Tutorial/1作为示例。然后,Web服务需要返回具有Tutorial id#1的教程名称。
  2. 此部分代码用于返回“教程名称”,其中Tutorial id已传递给Web方法。
  • 默认情况下,需要记住的是,在浏览器中传递给URL的任何内容都是字符串。
  • 但你必须记住我们列表的索引必须是一个整数,所以我们添加必要的代码,首先将Tutorialid转换为整数,然后使用它来访问列表中的索引位置,
  • 然后相应地将值返回给调用程序。

步骤8)下一步是编写POST方法的代码。每当我们想通过POST方法将字符串值添加到我们的Tutorials列表时,就会调用此方法。例如,如果要添加“软件测试”的教程名称,则需要使用POST方法。

web service restful框架 教程

代码说明: -

  1. 第一行是'WebInvoke'属性,它已附加到我们的方法中。这允许通过POST调用调用该方法。RequestFormat和ResponseFormat属性必须作为JSON提及,因为在将值发布到RESTFul Web服务时,值必须采用此格式。
  2. 第二行代码用于将通过POST调用传递的字符串值添加到我们现有的Tutorial字符串列表中。

步骤9)最后,我们将添加我们的方法来处理DELETE操作。每当我们想通过DELETE方法从我们的Tutorials列表中删除现有的字符串值时,就会调用此方法。

web service restful框架 教程

[WebInvoke(Method =“DELETE”,RequestFormat = WebMessageFormat.Ison,
	UriTemplate =“/ Tutorial / {Tutorialid}”,ResponseFormat = WebMessageFormat.Json,
	BodyStyle = WebMessageBodyStyle.Wrapped)]
	
public void DeleteTutorial(String Tutorialid)
{
	int pid;
	Int32.TryParse(Tutorialid,out pid);
	1st.RemoveAt(PID);
}

代码说明: -

  1. 第一行是'WebInvoke'属性,它已附加到我们的方法中。这允许通过POST调用调用该方法。RequestFormat和ResponseFormat属性必须作为JSON提及,因为在将值发布到RESTFul Web服务时,值必须采用此格式。请注意,Method参数设置为“DELETE”。这意味着每当我们发出DELETE谓词时,都会调用此方法。
  2. 第二行代码用于获取通过DELETE调用发送的Tutorialid,然后从列表中删除该ID。(代码中的Int32函数用于将Tutorial ID从字符串变量转换为整数)。

运行您的第一个Restful Web服务

现在我们已经在上一节中创建了我们的整个Web服务。让我们看看我们如何运行Tutorial服务,以便可以从任何客户端调用它。

要运行Web服务,请按照以下步骤操作

步骤1)右键单击Project文件 - Webservice.REST

web service restful框架 教程

步骤2)选择菜单选项'设为启动项目'。这将确保在Visual Studio运行整个解决方案时运行此项目

web service restful框架 教程

步骤3)下一步是运行项目本身。现在,根据系统上安装的默认浏览器,Visual Studio中的运行按钮旁边会显示相应的浏览器名称。在我们的案例中,我们展示了Google Chrome。只需单击此按钮即可。

web service restful框架 教程

输出: -

运行项目时,您可以浏览到TutorialService.svc / Tutorial部分,您将获得以下输出。

web service restful框架 教程

在上面的输出中,

  • 您可以看到浏览器正在调用'GET'动词并在Web服务中执行'GetAllTutorial'方法。该模块用于显示我们的Web服务公开的所有教程。

测试您的第一个Restful Web服务

在上一节中,我们已经了解了如何使用浏览器执行'GET'动词并调用'GetAllTutorial'。

  1. 现在让我们使用浏览器执行以下用例场景。

GET Tutorial / Tutorialid - 当客户端调用此Restful API时,将根据客户端发送的Tutorialid给出教程名称。

在浏览器中,在URL中的Tutorial字后面附加字符串/ 1。如果按下回车键,您将获得以下输出

web service restful框架 教程

现在,您将看到Queues的输出,它实际上对应于Tutorial Strings列表中的数字1。这意味着现在正在从我们的Web服务调用'GetTutorialbyID'方法。它还显示1的值通过浏览器成功传递到我们的Web服务和我们的方法,这就是为什么我们在浏览器中获得正确的“队列”对应值。

  1. 接下来让我们通过执行以下方案来使用我们的Web服务。为此,您需要安装名为“Fiddler”的工具,该工具是该站点的免费下载工具。

POST Tutorial / Tutorialname - 当客户端调用此Restful API时,客户端将提交插入Tutorialname的请求。然后,Web服务将提交的Tutorial名称添加到集合中。

运行Filddler工具并执行以下步骤;

  1. 转到作曲家部分。这用于创建可以提交到任何Web的请求

    应用。

  2. 确保请求类型为“POST”并且正在访问正确的URL,在我们的示例中应该是http:// localhost:52645 / TutorialService.svc / Tutorial
  3. 确保Content-Type标记为application / json。请记住,我们的Web服务中的POST请求方法只接受json样式数据,因此我们需要确保在向应用程序发送请求时指定此方法。
  4. 最后,我们需要输入我们的数据。请记住,我们的POST方法接受一个名为'str。'的参数。所以我们在这里指定我们想要在我们的Tutorial名称集合中添加一个名为“Trees”的值,并确保它被标记为str变量名。

最后,只需单击fiddler中的Execute按钮。这将向Web服务发送请求,将数据“Trees”发布到我们的Web服务。

web service restful框架 教程

现在,当我们浏览Tutorial URL以显示Tutorial列表中的所有字符串时,您现在将看到“Trees”的值也存在。这表明对Web服务的POST请求已成功执行,并且已成功添加到我们的教程列表中。

web service restful框架 教程

  1. 接下来让我们通过执行以下方案来使用我们的Web服务。为此,我们还需要使用fiddler工具

DELETE Tutorial / Tutorialid-当客户端调用此Restful API时,客户端将根据Tutorialid提交删除Tutorialname的请求。然后,Web服务将从集合中删除提交的教程名称。

运行Filddler工具并执行以下步骤

  1. 转到作曲家部分。这用于创建可以提交到任何Web的请求

    应用。

  2. 确保请求类型为“DELETE”并且正在访问正确的URL,在我们的示例中应该是http:// localhost:52645 / TutorialService.svc / Tutorial。确保用于删除列表中通过URL发送的字符串的id作为参数。在我们的示例中,我们发送1,因此这将删除我们的集合中的第二个元素,即“队列”。

最后,只需单击fiddler中的Execute按钮。这将向Web服务发送请求以将数据“队列”删除到我们的Web服务。

web service restful框架 教程

现在,当我们浏览Tutorial URL以显示我们的Tutorial列表中的所有字符串时,您会注意到“Queues”的值不再存在。

这表明已成功执行对Web服务的DELETE请求。我们的Tutorial字符串列表中索引号为1的元素已成功删除。

web service restful框架 教程

摘要

  • REST代表REpresentational State Transfer。REST用于构建轻量级,可维护性和可伸缩性的Web服务。
  • 越来越多的应用程序正在转向Restful架构。这是因为现在有很多人使用移动设备和更多种应用程序迁移到云端。
  • REST的主要方面是驻留在服务器上的资源以及GET,POST,PUT和DELETE的动词,它们可用于处理这些资源。
  • Visual Studio和.Net可用于创建Restful Web服务。
  • 测试 POST和PUT的Web服务时,您需要使用另一个名为fiddler的工具,该工具可用于将POST和PUT请求发送到服务器。

 原文转自:https://www.guru99.com/restful-web-services.html