ASP.NET的路由是通过EndpointRoutingMiddleware和EndpointMiddleware这两个中间件协作完成的,它们在ASP.NET平台上具有举足轻重的地位,MVC和gRPC框架...Minimal API更是将提升到了前所未有的高度,是我们直接在路由系统基础上定义REST API。...(本篇提供的实例已经汇总到《ASP.NET Core 6框架揭秘-实例演示版》) [S2001]注册路由终结点 (源代码) [S2002]以内联方式设置路由参数的约束(源代码) [S2003]定义可缺省的路由参数...ForecastAsync方法也并没有对提取的路由参数做任何验证,所以在执行过程中面对不合法的输入会直接抛出异常。...这样针对ForecastAsync方法的改动就完全没有必要。
项目开始提升到Richardson成熟度3级的高度,尽管暂时还没有实现REST所有的约束,但是已经比较RESTful了。....jpg HATEOAS(Hypermedia as the engine of application state)是 REST 架构风格中最复杂的约束,也是构建成熟 REST 服务的核心。...为了让ASP.NET Core Web API 支持HATEOAS, 得需要自己手动编写代码实现....所以我们返回的content-type的类型是错误的,而且还会导致API消费者无法从content-type的类型来正确的解析响应,也就是说我没有告诉API消费者如何来处理这个结果。...这时,错误提示就没有了: ? 微软的API Versioning库 微软提供了一个API 版本管理的库:Microsoft.AspNetCore.Mvc.Versioning。
标准的认证流程开始于一个访问服务器被保护资源的匿名请求, HTTP服务器随后处理了该请求并决定拒绝让它访问被保护的资源, 因为该请求没有凭据; 随后HTTP Server发送了一个WWW-Authenticate...这几种方案里Basic提供的保护程度/级别最低, 而Negotiate最高/强. ASP.NET Core可选择的认证提供商就很多了, 例如ASP.NET Core Identity....但是它主要用于包含页面的web应用, 例如MVC或Razor Page, 并不适用于REST/Web API, 所以不介绍它了....我一直在用Identity Server 4, 但是这里不会深入介绍, 这里主要介绍如何实现REST API, 如果有需要的话, 可以写一系列关于Identity Server 4的文章....这样就可以保护API,避免一些非正常使用的场景,例如网络爬虫或请求太多而导致API的性能严重下降,Dos和DDos。
在RPC的世界里, 节点仅仅就是可以在远程被触发的函数, 而在REST的世界里, 节点就是实体, 也叫做资源....REST的原则/约束 REST有6大原则/约束, 每一个原则都是对API有正面或负面影响的设计决定....然后我们看一下项目文件, 右键编辑MyRestful.Api: ? 这里, SDK属性表示了我们使用的是哪个SDK, 而目标框架是.NET Core 2.0....这个把Http请求绑定到参数的过程叫做实体绑定。 例如: ? 其中id参数是定义在路由里的,而name参数在路由里没有,但是仍然可以从查询参数中把name参数映射出来。...实体验证 ASP.NET Core内置的实体验证是通过验证属性标签来实现的,大多数情况下这样会很方便。 例如: ?
html 本文介绍的是使用ASP.NET Core建立Richardson成熟度为2级的伪RESTful web API, 本文介绍的是GET和POST....所以也没有响应的payload....,表示API的消费者发送到服务器的请求是错误的 401 - Unauthorized,表示没有权限 403 - Forbidden,表示用户验证成功,但是该用户仍然无法访问该资源 404 - Not found...entity,表示请求的格式没问题,但是语义有错误,例如实体验证错误。...的情况下,就该返回一个默认的格式,在ASP.NET Core 2.0里面就是application/json。
对比一下: 私有缓存:后续的请求会节省网络带宽,我们需要与API进行通信,但是API不需要把完整的响应返回来,如果资源没有变化的话只需要返回304即可。...组合使用过期模型和验证模型 可以这样做: 如果使用私有缓存,这时只要响应没有过期,那么响应直接会从私有缓存返回。这样做的好处就是减少了与API之间的通信,也减少了API生成响应的工作,减轻了带宽需求。...如果验证成功,就会返回304,没有响应body,这就有可能减少了缓存和API之间的网络带宽需求,响应还是从缓存返回到客户端的。...悲观并发控制意味着资源是为客户1锁定的,只要资源处于锁定的状态,别人就不能修改它,只有客户1可以修改它。但是悲观并发控制是无法在REST下实现的,因为REST有个无状态约束。...最后客户1再更新(使用的是老的ETag): ? 返回412。 本文比较短,一些关于缓存技术的内容并没有写,距离REST的主题有点远。
在当今的Web开发中,构建强大的API已经成为了不可或缺的一部分。而在Python领域,Django框架提供了强大的REST框架,为开发者提供了一种高效、灵活的方式来构建和管理API。...Django中的REST框架提供了一套强大的工具和库,帮助开发者轻松构建和管理RESTful API。2....下面是一些可能的改进和扩展:自定义API端点在路由配置中,我们使用了DefaultRouter提供的默认路由,但有时候我们可能需要自定义API端点。...Django REST框架提供了丰富的文档和测试工具,可以帮助我们编写和管理API的文档和测试。...API文档Django REST框架提供了内置的API文档功能,可以自动生成API的文档,并提供给开发者参考和使用。
(从ASP.NET Core 2.0 迁移至 ASP.NET Core 2.1: https://docs.microsoft.com/en-us/aspnet/core/migration/20_21...但是仍然是Richardson成熟度顶多为2级的Web API,未达到RESTful API的标准和约束。 集合的更新操作 ?...首先我们需要从参数(query string参数)传进来pageIndex和pageSize,还要赋默认值,以防止API的消费者没有设置pageIndex和pageSize;由于pageSize的值是由...API的消费者来定的,所以应该在后端设定一个最大值,以免API的消费者设定一个很大的值。...所以如果返回这样的数据就违反了REST的规则了(尽管本文代码的Richardson成熟度最多也就是2级),它违反了自我描述的约束(请参考本系列的预备知识文章),API消费者不知道如何通过application
在RPC的世界里, 节点仅仅就是可以在远程被触发的函数, 而在REST的世界里, 节点就是实体, 也叫做资源....REST的原则/约束 REST有6大原则/约束, 每一个原则都是对API有正面或负面影响的设计决定....选择空模板, OK: 项目建立好了, 结果如下: 然后我们看一下项目文件, 右键编辑MyRestful.Api: 这里, SDK属性表示了我们使用的是哪个SDK, 而目标框架是.NET Core...这个把Http请求绑定到参数的过程叫做实体绑定。 例如: 其中id参数是定义在路由里的,而name参数在路由里没有,但是仍然可以从查询参数中把name参数映射出来。...实体验证 ASP.NET Core内置的实体验证是通过验证属性标签来实现的,大多数情况下这样会很方便。
在REST API里,我们有时也会遇到这样的需求。我们暂时把这个方法叫做Upsert (Update + Insert) 。那么问题来了应该使用POST还是PUT呢?...验证 为了进行输入验证(不验证输出),我们需要做以下三方面工作: 定义验证规则 检查验证规则 把验证错误信息发送给API的消费者 之前的文章也提到的ASP.NET Core里面定义验证规则的方式: Data...对于EFCore的实体约束和验证,我不愿意使用注解的方式(因为Model类应该只干自己的活),更喜欢使用fluent api。...此外,目前这些验证规则是处于EFCore 的实体上的,而报告给API消费者的验证错误信息应该定义在Resource这一层面上,所以下面就为Resource model定义验证规则: ? ?...由于ASP.NET Core并没有内置的帮助方法可以返回422和验证错误信息,所以我们先建立一个类用于返回 422 和验证错误信息,它继承于ObjectResult: ?
不知道您有没有发现上面这几个例子中日志输出的时候都有个数字 [0], 它是事件的标识符。因为上面的例子中我们没有指定事件的ID,所以就取默认值0。使用事件ID还是可以帮助我们区分和关联记录的日志的。...并把它们添加到MyRestful.Api项目的引用里....用REST的术语来说, 我们把客户端请求服务器返回的对象叫做资源(Resources)....而且我之前讲过应该把Repository看作是Domain Models的集合, 例如list, 而list.Save()也没有什么意义....好的, 这次先写道这里, 项目已经做好了最基本的准备, 其余功能的扩展会随着后续文章进行. 下面应该快要切入REST的正题了.
Piranha CMS – 用于ASP.NET核心和实体框架核心的轻量级且不显眼的开源CMS。...npoi – 可以读取/写入没有安装Microsoft Office的Office格式的.NET库。没有COM +,没有互操作。...Unstable version MiniProfiler – 一个简单但有效的ASP.NET网站迷你分析器。...Microphone – 使用Consul或ETCD集群上的Web Api或NancyFx运行自托管REST服务的轻量级框架。...示例.NET Core CQRS REST API – 使用Clean Architecture的原始SQL和DDD的.NET Core REST API CQRS实现。
API,同时提供了与现有API的兼容。...WebApplicationBuilder 四、 工厂方法 一、基础模型 对于由WebApplication和WebApplicationBuilder构建的承载模型,我们没有必要了解其实现的每一个细节...为了提供更加简洁的API,WebApplicationBuilder类型提供了一系列的属性。...Minimal API的实现原理。...上面提供的源代码也不是伪代码,如下所示的就是在“模拟的Minimal API”构建的ASP.NET Core应用,它是可以正常运行的。
Web UI 服务 ThingsBoard 提供了一个使用 Express.js 框架编写的轻量级组件来承载静态 web ui 内容。这些组件是完全无状态的,没有多少可用的配置。静态网页界面包含捆绑。...一旦加载完成,应用程序就开始使用 ThingsBoard Core 提供的 REST API 和 websocket API。...Node 微服务 节点是一个用 Java 编写的核心服务,负责处理: REST API 调用; 关于实体遥测和属性更改的 WebSocket 订阅; 通过规则引擎处理消息; 监视设备连接状态(活动/非活动...Web UI 微服务 提供了一个使用 Express.js 框架编写的轻量级组件来承载静态 web ui 内容。这些组件是完全无状态的,没有多少可用的配置。 4....包含了data、util、message 、actor、queue、 transport 、dao-api、cluster-api、stats、cache 、coap-serve、edge-api 共计
template 为路由规则,比如 \{:name}\{:id} TODO: ASP.NET Core路由规则中参数有没有 : 不确定 无视下图的 [HttpGet("")],只为后图演示,其实不能这么写...:RazorViewEngine,它维护了一个匹配路由规则的列表 ASP.NET Core 中其实是无需注解路由的,因为这样和Controller类名 ,Action 方法名,默认匹配路由的规则已经被框架...-- 查询单个 id必须唯⼀ 和dao中的函数名关联 parameterType="" 表示约束传⼊参数的类型--如果参数类型过多,可以不⽤写 resultType="" 表示返回值的类型(必须是实体类和数据库字段...使用Restful API 风格 其实与 ASP.NET MVC 与 ASP.NET WebAPI 普通 Controller 与 ApiController 的区别 类似 Q: 无法连接数据库 java.sql.SQLException...test 中并不由SQL解析,而是框架 其它 SpringMVC 默认的方式是转发 转发: 表示 一次请求 重定向: 重新发起一次请求 AJAX 请求登录后,响应 Set-Cookie ,但浏览器仍然没有设置
一、REST风格 1.REST简介 REST(Representational State Transfer)是一种软件架构风格,它的核心理念是将应用程序的功能转化为可以被URL所表示的资源,并通过HTTP...以下是一个简单的REST示例,假设我们要创建一个应用程序,用于管理书籍信息。我们可以使用RESTful架构来进行设计。...+id); return "{'module':'user getById'}"; } //设置当前请求方法为GET,表示REST风格中的查询操作 @RequestMapping...3.2 Rest快速开发 解决以上三个问题 解决问题1:在Controller类上使用@RequestMapping定义共同的访问路径。...dependency> javax.servlet javax.servlet-api
使用 AngularJS 的 $resource 连接 WebAPI Controller ASP.NET Web API 是 .NET 平台创建 REST 风格的 HTTP 服务的理想框架, REST...由于 REST 服务的逐渐流行, 越来越多的客户端类库都提供了 REST 服务的专用类库, AngularJS 也不例外, 提供了 $resource 来实现 REST 服务的支持。...接下来就介绍如何使用 AngularJS 的 $resource 对接 ASP.NET Web API 创建的 REST 服务。...DELETE ~/api/categories/{id:int} Delete category by id AngularJS 提供了 resource 服务来创建具有高级行为的对象和 REST...REST 服务, 还需要一个使用 PUT 的 update 动作, 客户端代码如下: var categories = $resource('/api/categories/:id', { id: '@
ASP.NET WEB API 是一个框架用来搭建HTTP服务以供客户端(比如:浏览器,手机,IPhone等)调用。...但是它并不是MVC框架的一部分。它是 ASP.NET 平台的核心部分。能被MVC或者其他类型的web应用使用。同时它也可以用作独立的web服务应用程序。...比如:twitter,facebook,Google Api都支持web应用程序和手机app。 WEB API是一个很棒的框架用来暴露你的数据和服务到不同的设备。...WEB API 一种新的框架提供了简易的方式用来搭建HTTP services。 WEB API是一个开源的理想的平台在.NET Framework上搭建REST-ful services。...WEB API 的请求映射到Http动词对应的action;MVC 的请求直接映射到对应的action name。 ASP.NET WEB API是新的框架和ASP.NET框架核心的一部分。
除了提供一些基本的操作(像增删改查),也提供了一些高级的操作类似过滤数据和实体的导航。OData扩展了上述的协议但是不是取代他们。...如果你过去在给你的REST服务创建搜索、过滤、或者分页API的时候感觉很麻烦,那么OData将是一个不错的选择。 目前很多接口,无论是基于SOAP、REST还是别的都在交换数据时使用不同的模式。...最后,决定想要查询的东西,通过比如邮政编码来查询。 首先是,没有创建泛型客户端的途径,而这些和API紧密联系,因为它不知道参数的顺序或者模式被使用的顺序。...前者导致API 需要管理的界面的增加,后者会导致我们通常所说的“数据竖井”,也就是关键数据在特定模式中锁定,其他应用不能够简单应用,因为它没有以一种需要的方式暴露给这个应用。...我们没有写任何一个特别的逻辑去支持这些功能,全部都由框架来提供的。是不是OData为你的搜索、过滤、或者分页API的时候提供了一个很好的选项。
Portal-Basic Java Web应用开发框架(简称 Portal-Basic)是一套功能完备的高性能Full-Stack Web应用开发框架,内置稳定高效的MVC基础架构和DAO框架(已内置Hibernate...Portal-Basic主要特点: 1) 功能全面:内置稳定高效的MVC基础架构和DAO框架,支持Action拦截、Form Bean / Dao Bean / Spring Bean装配和声明式事务,...另外,Portal-Basic并没有对JSP/Servet API进行过多封装,开发者仍然使用JSP/Servet API开发应用程序,没有过多的迂回,性能得到保证。...3) 优秀的使用体验:Portal-Basic的设计目标之一是提供良好的开发体验,尽量减少应用程序开发者 的工作,API的设计力求简单、完整、明确。...:应用篇(五) —— DAO 框架Portal-Basic Java Web 应用开发框架:应用篇(六) —— 公共组件Portal-Basic Java Web 应用开发框架:应用篇(七) —— 页面静态化