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的员工的详细信息

RESTful Web服务

为什么要休息

由于以下原因,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服务。

RESTful Web服务

  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客户端 - 服务器

    RESTful Web服务

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

  1. 无状态

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

  1. 高速缓存

RESTful Web服务

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。

RESTful Web服务

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

步骤2)在这一步中,

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

RESTful Web服务

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

RESTful Web服务

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

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

RESTful Web服务

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

RESTful Web服务

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

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

RESTful Web服务

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

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

RESTful Web服务

  1. 查找<enableWebScript>行

RESTful Web服务

  1. 将行更改为<webHttp>

RESTful Web服务

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

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

RESTful Web服务

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

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

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

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

RESTful Web服务

[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。

RESTful Web服务

[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方法。

RESTful Web服务

代码说明: -

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

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

RESTful Web服务

[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

RESTful Web服务

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

RESTful Web服务

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

RESTful Web服务

输出: -

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

RESTful Web服务

在上面的输出中,

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

测试您的第一个Restful Web服务

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

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

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

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

RESTful Web服务

现在,您将看到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服务。

RESTful Web服务

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

RESTful Web服务

  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服务。

RESTful Web服务

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

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

RESTful Web服务

摘要

  • 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

发布了17 篇原创文章 · 获赞 3 · 访问量 4049

猜你喜欢

转载自blog.csdn.net/HPFBoy/article/details/89947164