如何使用dotnet core 編寫REST風格API

weixin_33978044發表於2018-12-18

當 asp. net core 釋出時, microsoft 和. net 社群決定合併 mvc 和 web api 的功能。這是有道理的, 因為兩者是非常相似。這篇文章主要包含如下內容:

  • Web API 和 MVC
  • 採用ASP.NET Core MVC 6 建立 REST API
  • 編寫 REST API 的其它框架 - NancyFx

ASP.NET Web API 和 MVC: 有什麼區別嗎?

在ASP.NET Core 之前,它們是非常相似的。都採用了MVC模式,包含 controllers 和 actions。Web API 缺少像Razor這樣的檢視引擎,而是用來實現REST API。MVC 是用來設計帶有HTML前臺的標準Web應用。

微軟將 web api 吹捧為構建任何型別的 http 服務的框架。它是 wcf、soap 和較舊的 asmx 風格 web 服務的一個很好的替代方案。它是從頭開始設計的, 考慮到了 json 和 rest。web api 還支援 odata, 這是通過 crud 操作查詢資料的標準方式。

採用命令 dotnet new wepapi 建立專案,預設會建立一個樣例API,包括 GET, POST, PUT, DELETE 這些REST標準的方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

namespace dotnetCore.jwt.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "value1", "value2" };
        }
        // GET api/values/5
        [HttpGet("{id}")]
        public ActionResult<string> Get(int id)
        {
            return "value";
        }
        // POST api/values
        [HttpPost]
        public void Post([FromBody] string value)
        {
        }
        // PUT api/values/5
        [HttpPut("{id}")]
        public void Put(int id, [FromBody] string value)
        {
        }
        // DELETE api/values/5
        [HttpDelete("{id}")]
        public void Delete(int id)
        {
        }
    }
}

微軟網站上有個標準教程

Nancy 也是編寫API的一個好的選擇

除了 asp. net 附帶的標準 mvc 框架之外, 還有一些社群替代方案。其中最受歡迎的一種叫Nancy。它已經存在了相當長的時間, 並且是使用 mono 構建的 web 應用在 linux 上執行的熱門選項, 因為它允許 asp. net 在沒有 iis 或標準 system. web 管道的情況下工作。

Nancy能做什麼?這裡是基本框架內建功能的簡短列表︰

  • 基於 rest 路由
  • 內建的簡單檢視引擎,可置換
  • 提供靜態檔案服務
  • 多租戶服務託管
  • Rest API 認證 (基本認證,表單認證和基於令牌的認證)
  • 靈活模型繫結
  • 多格式內容協商
  • 密碼金鑰和短語生成
  • SSL 證書處理
  • 非同步任務處理
  • 依賴注入

Nancy對引數的讀取讓人非常喜歡,下面是一個簡單示例,你可以瞭解下。

public class Module : NancyModule
{
    public Module()
    {
        Get("/greet/{name}", x => {
            return string.Concat("Hello ", x.name);
        });
    }
}

想了解更多Nancy的資訊可以訪問官方Github https://github.com/NancyFx/Nancy

文章參考:
https://stackify.com/asp-net-core-web-api-guide/
https://www.cnblogs.com/lilunjia/tag/NancyFx/

相關文章