创建支持CRUD(增删改查)操作的Web API(二)
一:准备工作
你可以直接下载源码查看
Download the completed project.
下载完整的项目
CRUD是指“创建(C)、读取(R)、更新(U)和删除(D)”,它们是四个基本的数据库操作。许多HTTP服务也会通过REST或类REST的API模拟CRUD操作。
在本教程中,我们将建立一个十分简单的Web API来管理一列产品。
每个产品包含一个name(名称)、price(价格)和category(分类)(如,“toys(玩具)”、“hardware(硬件)”等),还有一个产品的ID。
表2-1. Products API 具有下面几个的HTTP方法
Action 动作 |
HTTP method HTTP方法 |
Relative URI 相对URI |
---|---|---|
Get a list of all products 获取全部产品列表 |
GET | /api/products |
Get a product by ID 通过ID获取一个产品 |
GET | /api/products/id |
Get a product by category 通过分类获取产品 |
GET | /api/products?category=category |
Create a new product 创建一个新产品 |
POST | /api/products |
Update a product 更新一个产品 |
PUT | /api/products/id |
Delete a product 删除一个产品 |
DELETE | /api/products/id |
注意,有些URI在路径中包含了产品ID。例如,要得到ID为28的产品,客户端要发送一个http://hostname/api/products/28的GET请求。
二:方法
下面来说下增删改查CRUD的四种方法
1.GET接收指定URI上的资源表达式。GET在服务器上应当没有副效应。(区分URI URL URN)
2.PUT更新指定URI上的资源。如果服务器允许客户端指定新URI,PUT也可以用于在指定URI上创建新资源。对于本教程,API将不支持通过PUT的创建。
3.POST创建新资源。服务器为新对象分配URI,并把这个URI作为响应消息的一部分加以返回。
4.DELETE删除指定URI上的资源。
三:创建一个新的WEBAPI项目
启动VS 2013,并在“开始页”选择“新项目”。或从“文件”菜单选择“新建”,然后选择“项目”。
在“模板”面板中选择“已安装模板”,并展开“Visual C#”节点。选择该节点下的“Web”。在项目模板列表中选择“ASP.NET MVC 4 Web应用程序”。将此项目命名为“ProductStore”,点击“OK”
在“新的ASP.NET MVC 4项目”对话框中选择“Web API”,点击“OK”
1.添加模型
模型是表示你应用程序中数据的一种对象。在ASP.NET Web API中,你可以使用强类型的CRL(公共语言运行时)对象作为模型,而它们将被自动化地序列化成用于客户端的XML或JSON
对于这个ProductStore API,其数据由产品组成,因此,我们将创建一个名为Product的新类
如果“解决方案资源管理器”此时尚不可见,点击“视图”菜单,并选择“解决方案资源管理器”。在“解决方案资源管理器”中,右击“Models”文件夹。从上下菜单中选择“添加”,然后选择“类”。将这个类命名为“Product”(如图)
将以下属性添加到这个Product类。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace ProductStore.Models
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
}
2.添加存储库
我们需要存储产品集合。将这个集合与我们的服务实现分开是一种好的思想。这样,我们可以修改后台存储而不必重写服务类。这种设计类型称为存储库模式。首先从定义存储库的泛型接口开始
在“解决方案资源管理器”中,右击“Models”文件夹。选择“添加”,然后选择“新项”
在“模板”面板中,选择“已安装模板”,并展开“C#”节点,选择“代码”。在代码模板列表中选择“接口”。将此接口命名为“IProductRepository”
添加以下实现:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ProductStore.Models
{
interface IProductRepository
{
IEnumerable<Product> GetAll();
Product Get(int id);
Product Add(Product item);
void Remove(int id);
bool Update(Product item);
}
}
现在,把另一个类添加到Models文件夹,名称为“ProductRepository”。这个类将实现这个IProductRespository接口。添加以下实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace ProductStore.Models
{
//实现接口IProductRepository的方法
public class ProductRepository : IProductRepository
{
private List<Product> products = new List<Product>();//实例化一个产品集合
private int _nextId = ;
//构造函数
public ProductRepository()
{
Add(new Product { Name = "Tomato soup", Category = "Groceries", Price = 1.39M });
Add(new Product { Name = "Yo-yo", Category = "Toys", Price = 3.75M });
Add(new Product { Name = "Hammer", Category = "Hardware", Price = 16.99M });
}
//获取所有产品
public IEnumerable<Product> GetAll()
{
return products;
}
//查询某一个产品信息
public Product Get(int id)
{
return products.Find(p => p.Id == id);
}
//添加方法
public Product Add(Product item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
item.Id = _nextId++;
products.Add(item);
return item;
}
//删除某一个产品方法
public void Remove(int id)
{
products.RemoveAll(p => p.Id == id);
}
//更新方法
public bool Update(Product item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
int index = products.FindIndex(p=>p.Id==item.Id);
if (index == -)
{
return false;
}
products.RemoveAt(index);
products.Add(item);
return true;
}
}
}
该存储库在本地内存中保持了一个产品列表。对一个教程而言这就行了,但在一个真实应用程序中,你要在外部存储这些数据,可以是一个数据库,或是云存储库。这种存储库模式会使今后对这个实现的修改很容易
3.添加Web API控制器
如果你曾使用过ASP.NET MVC,对控制器是熟悉的。在ASP.NET Web API中,控制器是一种处理客户端HTTP请求的类。“新项目”向导在创建项目时,为你创建了两个控制器。要看到它们,可以在“解决方案资源管理 器”中展开Controllers文件夹。
(1).HomeController一个传统的ASP.NET MVC控制器。它负责对网站的HTML页面进行服务,而与Web API无直接关系。
(2).ValuesController是一个WebAPI控制器例子。
继续并删除这个ValuesController,在“解决方案资源管理器”中右击这个文件,并选择“删除”。现在,添加一个新控制器,操作如下:
在“解决方案资源管理器”中,右击Controllers文件夹。选择“添加”,然后选择“控制器”
在“添加控制器”向导中,将此控制器命名为“ProductsController”。在“模板”下拉列表中选择“空的API控制器”。然后点击“添加”
注意是空api控制器不是空控制器
“添加控制器”向导将在Controllers文件夹中创建一个名为ProductsController.cs的文件。如果这个文件尚未打开,双击此文件打开它。添加以下的using语句
using ProductStore.Models;
添加一个保存IProductRepository实例的字段
using ProductStore.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http; namespace ProductStore.Controllers
{
public class ProductsController : ApiController
{
static readonly IProductRepository repository = new ProductRepository(); }
}
4.增删改查方法
这个ProductStore API 具体代码在Model 文件夹中的ProductRepository类中查看
创建支持CRUD(增删改查)操作的Web API(二)的更多相关文章
- MybatisPlus核心功能——实现CRUD增删改查操作 (包含条件构造器)
CRUD 官方文档:https://baomidou.com/ (建议多看看官方文档,每种功能里面都有讲解)[本文章使用的mybatisplus版本为3.5.2] 条件构造器 一般都是用service ...
- java实现hbase数据库的增删改查操作(新API)
操作环境: java版本: jdk 1.7以上 hbase 版本:1.2.x hadoop版本:2.6.0以上 实现功能: 1,创建指定表 2,删除指定表 3,根据表名,行键,列族,列描述符,值 ...
- yii2-basic后台管理功能开发之二:创建CRUD增删改查
昨天实现了后台模板的嵌套,今天我们可以试着创建CRUD模型啦 刚开始的应该都是“套用”,不再打算细说,只把关键的地方指出来. CRUD即数据库增删改查操作.可以理解为yii2为我们做了一个组件,来实现 ...
- (转)SQLite数据库增删改查操作
原文:http://www.cnblogs.com/linjiqin/archive/2011/05/26/2059182.html SQLite数据库增删改查操作 一.使用嵌入式关系型SQLite数 ...
- Android SQLite 数据库 增删改查操作
Android SQLite 数据库 增删改查操作 转载▼ 一.使用嵌入式关系型SQLite数据库存储数据 在Android平台上,集成了一个嵌入式关系型数据库--SQLite,SQLite3支持NU ...
- 使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序
使用ASP.NET Core MVC 和 Entity Framework Core 开发一个CRUD(增删改查)的应用程序 不定时更新翻译系列,此系列更新毫无时间规律,文笔菜翻译菜求各位看官老爷们轻 ...
- python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)
一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...
- 如何搭建一个WEB服务器项目(二)—— 对数据库表进行基本的增删改查操作
使用HibernateTemplate进行增删改查操作 观前提示:本系列文章有关服务器以及后端程序这些概念,我写的全是自己的理解,并不一定正确,希望不要误人子弟.欢迎各位大佬来评论区提出问题或者是指出 ...
- 国产化之路-统信UOS + Nginx + Asp.Net MVC + EF Core 3.1 + 达梦DM8实现简单增删改查操作
专题目录 国产化之路-统信UOS操作系统安装 国产化之路-国产操作系统安装.net core 3.1 sdk 国产化之路-安装WEB服务器 国产化之路-安装达梦DM8数据库 国产化之路-统信UOS + ...
随机推荐
- SQL错误:sql server 目录名无效
今天遇到一个错误,在网上找了半天,还有人说需要重装sql.我出错误的是网站服务器..重装影响太大了.想找一个比较不影响网站运作的办法.终于也不负我努力(啊喂!其实满百度都是可是你看不懂好吧!)找到了一 ...
- Android免坑指南(一)Sugar与SQLite
最近在Android手机开发中使用了ORM框架Sugar1.4,节省了大量代码,同时也遇到不少麻烦,记录如下: 1. 使用group by将查询结果转换为POJO对象 在Sugar1.4中,可以使用如 ...
- C#查询当前微信自定义菜单结构
查询 string access_token = "你的token"; string posturl = "https://api.weixin.qq.com/cgi-b ...
- 浅谈c#接口的问题,适合新手来了解
这段时间的项目有用到接口,开始不是特别理解接口,只是单单知道接口定义非常简单,甚至觉得这个接口只是多此一举(个人开发的时候).现在开始团队开发,才发现接口原来是这么的重要和便捷! 接下来就来谈谈我这段 ...
- angularjs开发遇到的坑
1.用ng-model绑定的输入input标签不能序列化$("form").serialize();要在value赋值才行. 2.disabled 是不能被序列化提交的(这不属于n ...
- bzoj3571: [Hnoi2014]画框 最小乘积匹配+最小乘积XX总结,
思路大概同bzoj2395(传送门:http://www.cnblogs.com/DUXT/p/5739864.html),还是将每一种匹配方案的Σai看成x,Σbi看成y,然后将每种方案转化为平面上 ...
- VS2010配置目录,解决:error MSB6006: “CL.exe”已退出,代码为 5问题
配置属性->VC++目录 可执行文件目录:$(VCInstallDir)bin;$(WindowsSdkDir)bin\NETFX 4.0 Tools;$(WindowsSdkDir)bin;$ ...
- 怎样用AIDL Service 传递复杂数据
大家都知道在Android中通过AIDL可以跨进程调用Service中的数据,网上也有很多实例,但是大部分实例都是关于基本数据类型的远程调用,很少讲到复杂数据的调用,今天我用一个例子来演示一下怎样用A ...
- Sdut 2409 The Best Seat in ACM Contest(山东省第三届ACM省赛 H 题)(模拟)
题目描述 Cainiao is a university student who loves ACM contest very much. It is a festival for him once ...
- Ubuntu下gcc及g++环境配置
直接在命令行中输入以下命令即可. sudo apt-get install build-essential 安装完成后输入 gcc 和 g++ 进行确认.