zoukankan      html  css  js  c++  java
  • RESTful API实现

    RESTful API实现

    ASP.NET Core Web API 开发-RESTful API实现

    REST 介绍:

    符合REST设计风格的Web API称为RESTful API。

    具象状态传输(英文:Representational State Transfer,简称REST)是Roy Thomas Fielding博士于2000年在他的博士论文 "Architectural Styles and the Design of Network-based Software Architectures" 中提出来的一种万维网软件架构风格。

    目前在三种主流的Web服务实现方案中,因为REST模式与复杂的SOAP和XML-RPC相比更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务执行图书查询;雅虎提供的Web服务也是REST风格的。

    符合REST设计风格的Web API称为RESTful API。它从以下三个方面资源进行定义:

    直观简短的资源地址:URI,比如:http://example.com/resources/。
    传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSON,XML,YAML等。
    对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。

    PUT和DELETE方法是幂等方法。GET方法是安全方法(不会对服务器端有修改,因此当然也是幂等的)。

    不像基于SOAP的Web服务,RESTful Web服务并没有“正式”的标准。这是因为REST是一种架构,而SOAP只是一个协议。虽然REST不是一个标准,但大部分RESTful Web服务实现会使用HTTP、URI、JSON和XML等各种标准。

    实现举例

    例如,一个简单的网络商店应用,列举所有商品,

    GET http://www.store.com/products
    

    呈现某一件商品,

    GET http://www.store.com/product/12345
    

    下单购买,

    POST http://www.store.com/order
    <purchase-order>
      <item> ... </item>
    </purchase-order>

    常用的HTTP动词有下面五个(括号里是对应的SQL命令)

    • GET(SELECT):从服务器取出资源(一项或多项)。
    • POST(CREATE):在服务器新建一个资源。
    • PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
    • PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
    • DELETE(DELETE):从服务器删除资源。

    下面我们就来在ASP.NET Core Web API 中实现。

    例子以用户为例,对用户的各个更改分别对应不同的HTTP 动词。

    首先我们创建一个ASP.NET Core Web API 应用。可以参考之前博文: http://www.cnblogs.com/linezero/p/5497472.html

    然后我们添加EF Core,来操作数据库。EF Core 教程:http://www.cnblogs.com/linezero/p/EntityFrameworkCore.html

    首先我们来新建一个类 User.cs 

        public class User
        {
            public int Id { get; set; }
            public string UserName { get; set; }
            public string Password { get; set; }
        }

    然后添加EF Core引用及创建DataContext.cs,并做配置。

    EF Core 1.0 已经发布了,所以引用及配置都可以更新一下。

    Install-Package Microsoft.EntityFrameworkCore.Sqlite

    配置对应做更新

    Install-Package Microsoft.EntityFrameworkCore.Tools –Pre
      "tools": {
        "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",

    最后使用dotnet ef 命令来创建数据库。

      dotnet ef migrations add MyFirstMigration
    
      dotnet ef database update

    下面就来正式Web API 的开发。

    这里我们添加一个Web API 控制器 UsersController 。

    会默认为我们生成GET POST PUT DELETE 对应的方法。这里我们就来具体实现。

    UsersController.cs

    复制代码
        [Route("api/[controller]")]
        public class UsersController : Controller
        {
            private DataContext Context;
            public UsersController(DataContext _context)
            {
                Context = _context;
            }
            // GET: api/users
            [HttpGet]
            public IActionResult Get()
            {
                return Ok(Context.Users.ToList());
            }
    
            // GET api/users/5
            [HttpGet("{id}")]
            public IActionResult Get(int id)
            {
                var _user = Context.Users.FirstOrDefault(r => r.Id == id);
                if (_user == null)
                    return NotFound();
                return Ok(_user);
            }
    
            // POST api/users
            [HttpPost]
            public IActionResult Post([FromBody]User user)
            {
                Context.Add(user);
                Context.SaveChanges();
                return Created($"api/users/{user.Id}",user);
            }
    
            // PUT api/users/5
            [HttpPut("{id}")]
            public IActionResult Put(int id, [FromBody]User user)
            {
                var _user = Context.Users.FirstOrDefault(r => r.Id == id);
                if (_user == null)
                    return NotFound();
                _user.UserName = user.UserName;
                _user.Password = user.Password;
                Context.Update(_user);
                Context.SaveChanges();
                return Created($"api/users/{_user.Id}", _user);
            }
    
            // DELETE api/users/5
            [HttpDelete("{id}")]
            public IActionResult Delete(int id)
            {
                var _user = Context.Users.FirstOrDefault(r => r.Id == id);
                if (_user == null)
                    return NotFound();
                Context.Remove(_user);
                Context.SaveChanges();
                return NoContent();
            }
        }
    复制代码

    实现好以后,我们使用Chrome 应用 ARC 来调试。

    增加-》Post:

    {"Id":1,"UserName":"LineZero","PassWord":"123456"}

     http://localhost:5000/api/users

    多个查询-》Get:

     http://localhost:5000/api/users

    单个查询-》Get(int id):

     http://localhost:5000/api/users/1

    修改-》Put:

    {"UserName":"LineZeroASPNETCore","PassWord":"123456789"}

     http://localhost:5000/api/users/1

    删除-》Delete:

     http://localhost:5000/api/users/1

    对应的Http 操作也都实现了。数据库相关操作也在代码里。

    对于ASP.NET Core Web API REST 风格的一种代码实现。

    ASP.NET Core Web API 默认JSON序列化的话,会将属性名自动转化为小写,这里我们只需要一句配置即可解决。

            public void ConfigureServices(IServiceCollection services)
            {
                // Add framework services.
                services.AddMvc().AddJsonOptions(r=>r.SerializerSettings.ContractResolver= new Newtonsoft.Json.Serialization.DefaultContractResolver());
            }

    本文示例代码:https://github.com/linezero/Blog/tree/master/ASPNETCoreAPI

    参考链接:

    https://zh.wikipedia.org/wiki/REST

    http://www.ruanyifeng.com/blog/2014/05/restful_api.html

  • 相关阅读:
    Vue常用特性-表单基本操作和表单修饰符
    Tab选项卡
    Vue模板语法
    Vue基本使用
    Vue概述
    Express框架
    模板引擎artTemplate
    MongoDB增删改查操作
    数据库概述及环境搭建
    请求响应原理及HTTP协议
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5727731.html
Copyright © 2011-2022 走看看