使用 .NET Core 3.x 构建 RESTFUL Api】的更多相关文章

1. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作 什么是REST REST一词最早是在2000年,由Roy Fielding在他的博士论文<Architectural Styles and the Design of Network-based Software Architecture>中提出的.他在本文中创造了REST这个术语.这篇论文的地址是:https://www.ics.uci.edu/~fielding/pubs/dissertation/…
准备工作:在此之前你需要了解关于.NET .Core的基础,前面几篇文章已经介绍:https://www.cnblogs.com/hcyesdo/p/12834345.html 首先需要明确一点的就是REST Api它不是一个标准,而是一种架构风格 什么是WebApi? WebApi通常是指“使用HTTP协议并通过网络调用的API”,由于它使用了HTTP协议,所以需要通过URI信息来指定端点. WebApi就是一个Web系统,通过访问URI可以与其进行信息交互. 而常用的MVC模式是主要用来构建…
以前写过ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本. 先决条件 我在B站有一个非常入门的ASP.NET Core 3.0的视频教程,如果您对ASP.NET Core不了解,就可以先看一下里面的基础知识和API相关的内容,地址是:https://www.bilibili.com/video/av65313713/. 预备知识:ASP.NET Core 和 C# 工具:Visual Studio 2019最新版(VSCode.VS for Mac,Rider等…
关于HTTP HEAD 和 HTTP GET: 从执行性能来说,这两种其实并没有什么区别.最大的不同就是对于HTTP HEAD 来说,Api消费者请求接口数据时,如果是通过HTTP HEAD的方式去请求, 应该是不会把 Body返回回去的.那么它会返回什么呢? 比如说,Headers的一些响应头数据,例如Content-Type的一些资源信息.而HTTP GET是会将 Body里面的数据返回的.因此,可以通过HTTP HEAD去检测该 Api 是否存在资源,换一种说法就是该 Api 是否可用. …
现在,当谈论起 RESTful Web API 的时候,人们总会想到 JSON.但是实际上,JSON 和 RESTful API 没有半毛钱关系,只不过 JSON 恰好是RESTful API 结果的表述格式.也就是说 RESTful API 还可以使用其它的表述格式,例如 xml 或私有的格式.这也就意味着,我们需要让 RESTful API 知道我们想要返回的格式.而这就是HTTP请求和响应的核心内容之一: Content Negotiation 内容协商 内容协商是这样一个过程:针对一个响…
之前讲了RESTful API的统一资源接口这个约束,里面提到了资源是通过URI来进行识别的,每个资源都有自己的URI.URI里还涉及到资源的名称,而针对资源的名称却没有一个标准来进行规范,但是业界还是有一些最佳实践的.那么我们首先看看这些最佳实践对资源命名是如何建议的. 资源命名 下面让我们来看看RESTful API资源命名的一些最佳实践. 使用名词,而不是动词 一个资源的URI代表的是一个实际上或概念上存在的东西,因此,它应该是名词,所以也就不应该出现动词,动词应该使用HTTP方法来表达.…
向Web API传递参数 数据可以通过多种方式来传给API. Binding Source Attributes 会告诉 Model 的绑定引擎从哪里找到绑定源. 共有以下六种 Binding Source Attributes: [FromBody] 请求的 Body [FromForm] 请求的 Body 中的 form数据 [FromHeader] 请求的 Header [FromQuery] Query string 参数 [FromRoute] 当前请求中的路由数据 [FromServ…
ASP.NET Core 3.x 的路由 路由机制会把一个请求的URI映射到一个Controller上面的Action,所以当你发送一个HTTP请求的时候,MVC框架会解析这个请求的URI,并尝试着把它映射到一个Controller上面的Action. 两个路由中间件 在ASP.NET Core 3.x里面,建议使用Endpoint路由来进行设置.但是我们需要先在请求的管道里面添加两个中间件: app.UseRouting().它是用来标记路由决策在请求管道里发生的位置,也就是在这里会选择端点.…
HTTP状态码 HTTP状态码会告诉API的消费者以下事情: 请求是否执行成功了 如果请求失败了,那么谁为它负责 HTTP的状态码有很多,但是Web API不一定需要支持所有的状态码.HTTP状态码一共分为5个级别: 1xx,属于信息性的状态码.Web API并不使用1xx的状态码. 2xx,意味着请求执行的很成功. 200 - Ok,表示请求成功: 201 - Created,请求成功并创建了资源: 204 - No Content,请求成功,但是不应该返回任何东西,例如删除操作. 3xx,用…
说到验证,那就需要做三件事: 定义验证规则 按验证规则进行检查 报告验证的错误.在把错误报告给API消费者的时候,报告里并不包含到底是服务端还是API消费者引起的错误,这是状态码的工作.而通常响应的Body里面会包含一组验证错误信息,API消费者可以把这些信息展示给API消费者的用户. 定义验证规则 想要定义验证规则,我们可以使用ASP.NET Core内置的方式或者使用第三方库. 在ASP.NET Core里面,验证规则可以通过以下的方式来进行定义: Data Annotations.例如 […
Entity Framework Core 使用的 Entity Model 是用来表示数据库里面的记录的. 而面向外部的 model 则表示了要传输的东西.这类 model 有时候叫做 Dto,有时候叫做 ViewModel. 举一个例子,人员的Entity Model如下: 最后一个字段表示人员的出生日期. 而它的面向外部的model:PersonDto是这样的: 而API消费者并不需要人员的出生日期,它只是需要人员的年龄,所以在PersonDto里面没有DateOfBirth这个字段,取而…
关于Entity Model vs 面向外部的Model Entity Framework Core 使用 Entity Model 用来表示数据库里面的记录. 面向外部的Model 则表示要传输的东西,有时候被称为 Dto,有时候被称为 ViewModel. 关于Dto,API消费者通过Dto,仅提供给用户需要的数据起到隔离的作用,防止API消费者直接接触到核心的Entity Model. 可能你会觉得有点多余,但是仔细想想你会发现,Dto的存在是很有必要的. Entity Model 与数据…
什么样的HTTP方法是安全的? 如果一个方法不会该表资源的表述,那么这个方法就被认为是安全的. 例如 HTTP GET 和 HTTP HEAD 就被认为是安全的,但需要注意的是,这并不意味着执行GET请求就不会引起其它的资源操作,在表面之下,你的服务层有可能会对其它相关的一些表的数据做出修改,但是本资源的表述不应该被改变.但即使相关的一些数据被修改了,这也不是API消费者所请求的事. 什么是HTTP方法的幂等性? 如果一个方法执行多次和执行一次的结果(带来的副作用)是一样的话,那么这个方法就被认…
译者荐语:利用周末的时间,本人拜读了长沙.NET技术社区翻译的技术标准<微软RESTFul API指南>,打算按照步骤写一个完整的教程,后来无意中看到了这篇文章,与我要写的主题有不少相似之处,特意翻译下来,全文将近3万字,值得大家收藏.尤其是作者对待问题的严谨思维,更是令我钦佩. 一步一步的构建整洁.可维护的RESTful APIs 查看译文 总览 RESTful不是一个新名词.它是一种架构风格,这种架构风格使用Web服务从客户端应用程序接收数据和向客户端应用程序发送数据.其目标是集中不同客户…
1.Spring MVC配置文件中的配置 [java] view plain copy <!-- 设置使用注解的类所在的jar包,只加载controller类 --> <context:component-scan base-package="com.jay.plat.config.controller" /> [java] view plain copy <!-- 使用 Swagger Restful API文档时,添加此注解 --> <mv…
RESTful服务 REST(Representational State Transfer)的意思是表征状态转移,它是一种基于HTTP协议的网络应用接口风格,充分利用HTTP的方法实现统一风格接口的服务.通过动词(HTTP方法)+名词(请求资源的接口路径)的方式请求资源,赋予接口特定的含义. REST风格定义了一系列创建HTTP服务的惯例: POST:创建资源 PUT:更新资源 GET:读取资源 DELETE:删除资源 例如: 获取所有书籍: GET /api/books 获取id为1的书籍:…
相关博文: 从消费者角度评估RestFul的意义 SpringBoot 构建RestFul API 含单元测试 首先,回顾并详细说明一下在快速入门中使用的  @Controller .  @RestController .  @RequestMapping 注解.如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容. @Controller :修饰class,用来创建处理http请求的对象 @RestController :Spring4之后加入的注解,原来…
先看一下使用Swagger2构建Restful API效果图 超级简单的,只需要在pom 中引用如下jar包 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.2.2</version> </dependency> <dependency> <g…
在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可以在访问接口上,直接添加注释 先介绍一下开发环境: jdk版本是1.8 springboot的版本是1.4.1 开发工具为 intellij idea 我们先引入swagger2的jar包,pom文件引入依赖如下: <dependency> <groupId>io.springfox&…
集成swagger2构建Restful API 在pom.xml中进行版本管理 <swagger.version>2.8.0</swagger.version> 给taosir-api的pom.xml中添加依赖配置 <!-- swagger start --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</ar…
1. 使用 Idea 创建 Spring Initializer 项目 在创建项目的对话框中添加 Web 和 Lombok,或者建立项目后在 pom.xml 中添加依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependenc…
目录 目录 前文列表 PUT 请求 DELETE 请求 测试 对一条已经存在的 posts 记录进行 update 操作 删除一条记录 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World! 用 Flask 来写个轻博客 (3) - (M)VC_连接 MySQL 和 SQLAlchemy 用 Flask 来写个轻博客 (4) - (M)VC_创建数据模型和表 用 Flask 来写个轻博客 (5) - (M)VC_SQLAl…
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 POST 请求 身份认证 测试 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World! 用 Flask 来写个轻博客 (3) - (M)VC_连接 MySQL 和 SQLAlchemy 用 Flask 来写个轻博客 (4) - (M)VC_创建数据模型和表 用 Flask 来写个轻博客 (5)…
目录 目录 前文列表 应用请求中的参数实现 API 分页 测试 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World! 用 Flask 来写个轻博客 (3) - (M)VC_连接 MySQL 和 SQLAlchemy 用 Flask 来写个轻博客 (4) - (M)VC_创建数据模型和表 用 Flask 来写个轻博客 (5) - (M)VC_SQLAlchemy 的 CRUD 详解 用 Flask 来写个轻博客 (6) -…
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 构建 RESTful Flask API 定义资源路由 格式化输出 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World! 用 Flask 来写个轻博客 (3) - (M)VC_连接 MySQL 和 SQLAlchemy 用 Flask 来写个轻博客 (4) - (M)VC_创建数据模…
前面介绍了如何Spring Boot 快速打造Restful API 接口,也介绍了如何优雅的实现 Api 版本控制,不清楚的可以看我之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html 在实际项目中,Api 接口系统对接过程中,Api 接口文档是非常重要的文档.一般是设计完成之后,同时编写Api 接口文档,然后将接口文档发给相关人员,于是大家就按照该文档开发.集成并最终上线.但是,这是一种非常理想的状态,实际开发中,…
在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能. 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文件夹,填加后,选中API文件夹, 选择新建项,选择填加Web API控制器,要注意控制器在命名时,是以Controller结尾的,这个不能改,前面的随意,比如,此处以NoteController.cs为例 填加后,打开NoteController.cs,系统已经帮我们构建好了一些基础的功能,我们需要…
在开发rest api的时候,为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTful API文档来记录所有接口细节,然而这样的做法有以下几个问题: 1.由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型.HTTP头部信息.HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下游的抱怨声不绝于耳. 2.随着时间推移,不断修改接口实现的时候都必须同步修改接口文档,而文档与代码又处于两个不同的媒介,除非有严格的管理机制,不然很容易导致不一致现象. 为了…
今天给大家介绍一款工具,这个工具眼下可预见的优点是:自己主动维护最新的接口文档. 我们都知道,接口文档是非常重要的,可是随着代码的不断更新,文档却非常难持续跟着更新,今天要介绍的工具,完美的攻克了这个问题. 并且.对于要使用我们接口的人来说,不须要在给他提供文档,告诉他地址.一目了然. 近期项目中一直有跟接口打交道,恰好又接触到了一个新的接口工具,拿出来跟大家分享一下. 关于REST接口,我在上篇文章中已经有介绍.这里来说一下怎样配合SwaggerUI搭建RestFul API 的可视化界面.终…
如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下相关的内容. @Controller:修饰class,用来创建处理http请求的对象 @RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式. @RequestMapping:配置url映射 下面我们尝试使用…