使用存储过程构建WebApi

在拥有SQL Server数据库并希望移动应用能够与之交互时,需要一个API。使用微软的工具,通常意味着编写一个WebApi应用程序,使用C#语言,利用Linq和Entity Framework编写代码,并通过数据模型和仓库来构建应用程序。但本文将展示一种不同的方法:使用存储过程开发WebApi后端。

将使用一个名为apirIO的开源NuGet包来实现。REST是关于资源的,资源可以是一个对象,比如一个产品,或者是一个产品列表。HTTP用于通过GET、PUT、POST、DELETE等动词来操作资源。

HTTP动词和URI

以下是一些HTTP动词及其对应的URI和描述:

  • GET http://myserver/products - 获取产品数组
  • GET http://myserver/products/1 - 获取ID为1的产品
  • PUT http://myserver/products/1 - 使用正文中的值更新产品1
  • POST http://myserver/products - 添加产品
  • DELETE http://myserver/products/99 - 删除产品

资源和SQL

使用SQL,开发存储过程来创建、读取、更新和删除产品。需要的HTTP动词是POST、GET、PUT、DELETE。按照约定,存储过程以API为前缀,然后是资源名称,然后是HTTP动词。对于示例产品资源,需要实现这些存储过程:

首先创建一个数据库,然后是产品示例表:

CREATE TABLE Products ( ProductID int IDENTITY(1,1) PRIMARY KEY, ProductName varchar(100) NOT NULL ); GO INSERT INTO Products(ProductName) VALUES ('Widget 1'); GO INSERT INTO Products(ProductName) VALUES ('Widget 2');

读取和定义资源

在GET存储过程中,返回一个或多个资源。此过程还定义了资源的结构:

CREATE PROCEDURE API_Products_Get ( @ID int = NULL ) AS SELECT ProductId, ProductName FROM Products WHERE ProductID = @ID OR @ID IS NULL

更新资源

更新存储过程将响应PUT HTTP动词。在这个例子中,希望能够更改产品的名称:

CREATE PROCEDURE API_Products_Put( @ID int, @ProductName VARCHAR(100) ) AS UPDATE Products SET ProductName = @ProductName WHERE ProductID = @ID

创建资源

POST存储过程可能很简单:

CREATE PROCEDURE API_Products_Post( @ProductName VARCHAR(100), @NewId int OUTPUT ) AS INSERT INTO Products(ProductName) VALUES (@ProductName) SET @NewId = @@IDENTITY RETURN 200

删除资源

最后,删除存储过程可能很简单:

CREATE PROCEDURE API_Products_Delete(@ID int) AS DELETE FROM Products WHERE ProductID = @ID

创建WebApi站点

有了这四个存储过程,就拥有了产品资源所需的所有代码。让使用Visual Studio 2015创建站点。使用标准的ASP.NET Web应用程序模板创建SqlWebApi

如何工作

当应用程序启动时,apirIO分析API*存储过程,并生成C#代码。生成的控制器继承自ASP.NET ApiControllers。代码在运行时编译并加载到项目中。C#源文件默认位于App_Data文件夹中。

文档化API

C#开发人员多年来一直在使用XML注释来记录代码。这些注释被Visual Studio等工具以及Swashbuckle使用。ApirIO允许对存储过程进行注释,并将任何注释移动到生成的C#代码中。这对于API文档化非常有用,因为它可以在Swagger中使用,并且与数据库一起存在。

通过几个简单的存储过程,为产品表创建了一个REST Api。在生产中,应该创建一个API用户并限制访问权限,以便能够执行API*存储过程。生成的API获得了ASP.NET ApiController类的所有好处。不需要编写一行C#代码。创建的Asp.Net站点将适用于任何具有API_*存储过程的数据库。对于另一个Api项目,只需复制网站并更改连接字符串。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485