创建你的第一个 RESTful 服务 5 个简单步骤






1.67/5 (4投票s)
创建你的第一个 RESTful 服务 5 个简单步骤
RESTful 服务是那些遵循 REST(Representational State Transfer,表述性状态转移)架构风格的服务。
在实现您的第一个 RESTful 服务之前,让我们先了解其背后的概念。我们知道 WCF 允许我们使用 SOAP 通过各种协议(例如 HTTP、TCP、命名管道和 MSMQ 等)进行调用和交换消息。在这种情况下,如果我们使用 SOAP over HTTP,我们只是将 HTTP 用作传输。但是 HTTP 不仅仅是传输。因此,当我们谈论 REST 架构风格时,它规定“不使用像 CORBA、RPC 或 SOAP 这样的复杂机制进行通信,而应该简单地使用 HTTP 进行调用”。
RESTful 架构使用 HTTP 进行所有 CRUD 操作(读取/创建/更新/删除),使用简单的 HTTP 动词(如 GET、POST、PUT 和 DELETE)。它既简单又轻量级。为了简单起见,我将仅实现一个 GET 请求,该请求将以 XML 格式返回某些类型的数据(即产品数据)。
以下是创建您的第一个以 XML 格式返回数据的 RESTful 服务的 5 个简单步骤。
- 创建一个 WCF 服务项目。
- 准备要返回的数据(例如,产品)。
- 创建服务合同
- 实现服务。
- 配置服务和行为
1. 创建一个 WCF 服务项目
- 打开 Visual Studio。
- 从文件 -> 新建项目。 从左侧选择 WCF 并创建一个新的 WCF 服务应用程序。
2. 准备要返回的数据
- 现在向新创建的项目添加一个类。将其命名为Products.cs。
现在,此Products.cs文件将包含两件事。第一个是数据协定。
[DataContract] public class Product { [DataMember] public int ProductId { get; set; } [DataMember] public string Name { get; set; } [DataMember] public string CategoryName { get; set; } [DataMember] public int Price { get; set; } }
第二个是单例实现的类,它从数据库获取产品数据并返回产品列表。 为了简单起见,我们在此类中准备数据,而不是从数据库中获取数据,如下所示
public partial class Products
{
private static readonly Products _instance = new Products();
private Products() { }
public static Products Instance
{
get { return products; }
}
private List<Product> products = new List<Product>()
{
new Product() { ProductId = 1, Name = "Product 1", CategoryName = "Category 1", Price=10},
new Product() { ProductId = 1, Name = "Product 2", CategoryName = "Category 2", Price=5},
new Product() { ProductId = 1, Name = "Product 3", CategoryName = "Category 3", Price=15},
new Product() { ProductId = 1, Name = "Product 4", CategoryName = "Category 1", Price=9} }; }
}
3. 创建服务合同
它会将合同和服务文件添加到项目中。 以下是服务合同的代码,即IProductRESTService.cs。
public interface IProductRESTService
{
[OperationContract]
[WebInvoke(Method = "GET",ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetProductList/")]
List<Product> GetProductList();
}
IProductRESTService
仅包含一个方法,即 GetProductList
。 关于此方法需要了解的重要点是 WebInvoke
属性参数。
- Method = "GET",表示一个 HTTP GET 请求。
ResponseFormat = WebMessageFormat.Xml
,响应格式将是 XML,但我们也可以通过将其值更改为WebMessageFormat.json
来返回 JSON。BodyStyle = WebMessageBodyStyle.Wrapped
,表示请求和响应都被包装。UriTemplate = "GetProductList/"
,它有两个部分,URL 路径和查询。
不要忘记在顶部添加 using System.ServiceModel.Web
。
4. 实现 RESTful 服务
在此步骤中,我们将要实现该服务。 合同中只定义了一个方法 GetProductList
,因此实现服务类将如下所示:
public class ProductRESTService : IProductRESTService
{
public List<Product> GetProductList()
{
return Products.Instance.ProductList;
}
}
5. 配置服务和行为
最后一步是使用配置文件配置服务及其行为。 以下是完整的ServiceModel
配置设置。
<system.ServiceModel> <services> <service name="MyRESTService.ProductRESTService" behaviorConfiguration = "serviceBehavior"> <endpoint address="" binding="webHttpBinding" contract="MyRESTService.IProductRESTService" behaviorConfiguration="web"> </endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="serviceBehavior"> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> <endpointBehaviors> <behavior name="web"> <webHttp/> </behavior> </endpointBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel>
webHTTPBinding
是用于 RESTful 服务的绑定。
现在,关于创建 RESTful 服务的所有工作都已完成。 您可以轻松地运行和测试它。
右键单击ProductRESTService.svc文件,然后单击“在浏览器中查看”。 您将看到以下屏幕,这意味着服务正常。
只需修改浏览器中的 URL 并添加“<span style="white-space: pre-wrap;">GetProductList/</span>
”即可。 因此,这是我们定义为服务合同方法的 UriTemplete。
希望这个简单的 WCF 教程对读者有所帮助。 为了保持简单,我将其限制为仅使用 HTTP GET 动词获取记录。 在我即将发表的文章中,我将提供使用 RESTful 服务的所有 CRUD(创建、读取、更新、删除)操作。