首页
学习
活动
专区
圈层
工具
发布

用ASP.NET Core 2.1 建立规范的 REST API -- HATEOAS

.jpg HATEOAS(Hypermedia as the engine of application state)是 REST 架构风格中最复杂的约束,也是构建成熟 REST 服务的核心。...它的重要性在于打破了客户端和服务器之间严格的契约,使得客户端可以更加智能和自适应,而 REST 服务本身的演化和更新也变得更加容易。...为了让ASP.NET Core Web API 支持HATEOAS, 得需要自己手动编写代码实现....所以我们返回的content-type的类型是错误的,而且还会导致API消费者无法从content-type的类型来正确的解析响应,也就是说我没有告诉API消费者如何来处理这个结果。...也许在ASP.NET MVC或者一些web网站可以自适应这种变化,如果这些网站的js,html等是从服务器端生成的;但是大多数的时候,其实很难实现这种自适应变化。

1.2K40

分布式系统核心:REST风格的架构,REST成熟度模型及REST API管理

◆ 成熟度模型 正确、完整地使用REST是困难的,关键在于RoyFielding所定义的REST只是一种架构风格,它并不是规范,所以也就缺乏可以直接参考的依据。...一个重要的结论就是,GET允许参与到路由中的参与者使用缓存机制,该机制是让目前的Web运转良好的关键因素之一。HTTP包含许多方法来支持缓存,这些方法可以在通信过程中被所有的参与者使用。...◆ REST API管理 下面介绍几种简洁的REST API设计的最佳实践,可以作为真假REST的一个判别依据。 1.使用的是名词而不是动词 使用名词来定义接口。...来序列化格式 客户端、服务器都需要知道相互之间的通信格式。...·Accept定义了接收相应的格式列表。 6.使用HATEOAS约束 HATEOAS是REST架构风格中最复杂的约束,也是构建成熟REST服务的核心。

1.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    用ASP.NET Core 2.1 建立规范的 REST API -- 保护API和其它

    这几种方案里Basic提供的保护程度/级别最低, 而Negotiate最高/强. ASP.NET Core可选择的认证提供商就很多了, 例如ASP.NET Core Identity....但是它主要用于包含页面的web应用, 例如MVC或Razor Page, 并不适用于REST/Web API, 所以不介绍它了....我一直在用Identity Server 4, 但是这里不会深入介绍, 这里主要介绍如何实现REST API, 如果有需要的话, 可以写一系列关于Identity Server 4的文章....当所支持的浏览器接收到这个header的时候, 浏览器就会阻止任何通过HTTP到指定域名的通信, 会使用HTTPS代替. 同时它也会阻止从浏览提的提示框点击的HTTPS....这样就可以保护API,避免一些非正常使用的场景,例如网络爬虫或请求太多而导致API的性能严重下降,Dos和DDos。

    1.7K20

    某村通信网络改造:从痛点到解决方案的全景分析

    随着城市化进程的加速,城中村改造项目正成为提升城市整体居住环境的重要抓手。在这些项目中,通信网络建设作为基础设施的一部分,直接关系到住户的生活质量。...城中村网络改造的核心需求在城中村改造项目中,网络建设的核心目标是实现住宅小区内的通信基础设施全覆盖,支持住户使用宽带、电话、有线电视等服务。...缺乏扩展性的网络设计随着5G和新兴物联网设备的普及,未来小区的网络需求将逐步从单一宽带接入转向多样化的智能化场景。如果在建设初期未考虑扩展性,后期升级的难度和成本将大幅增加。5....分布式多点组网:覆盖无死角通过在小区核心配线室和各楼宇部署智能组网设备,主干网络信号可通过分布式结构传递到每个住宅单元。...在未来,随着5G、物联网等技术的逐步普及,智能组网将成为通信网络建设的主流选择,为智慧社区的发展提供更多可能。

    23400

    用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识

    什么是REST REST 是 Representational State Transfer 的缩写....REST的原则/约束 REST有6大原则/约束, 每一个原则都是对API有正面或负面影响的设计决定....RESTful API 最关心的有这几方面: 性能, 可扩展性, 简洁性, 互操作性, 通讯可见性, 组件便携性和可靠性. 这些方面被封装在REST的6个原则里, 它们是:  1....客服端-服务端约束: 客户端和服务端是分离的, 它们可以独自的进化. 2. 无状态: 客户端和服务段的通信必须是无状态的, 状态应包含在请求里的....缓存: 缓存约束派生于无状态约束, 它要求从服务端返回的响应必须明确表明是可缓存的还是不可缓存的. 6. 按需编码: 这允许客户端可以从服务端访问特定的资源而无须知晓如何处理它们.

    2.2K00

    用ASP.NET Core 2.0 建立规范的 REST API -- GET 和 POST

    html 本文介绍的是使用ASP.NET Core建立Richardson成熟度为2级的伪RESTful web API, 本文介绍的是GET和POST....处理异常 当Action发生异常的时候,默认情况下ASP.NET Core会返回500: ? ? 但还是自己处理一下比较好,可以在Action里面使用try catch: ?...的情况下,就该返回一个默认的格式,在ASP.NET Core 2.0里面就是application/json。...当请求的media type不可用的时候,并且消费者不支持默认格式,这时服务器就应该返回 406 Not Acceptable 状态码。 ASP.NET Core 支持输出和输入两种格式化器。...下面看看创建Country的代码: ? 这个代码很简单,数据是从请求的body带进来的。 需要注意的是返回什么,如果POST操作执行成功的话,标准的做法是返回201 Created 状态码。

    2.1K10

    用ASP.NET Core 2.1 建立规范的 REST API -- 缓存和并发

    .jpg 缓存 根据REST约束:“每个响应都应该定义它自己是否可以被缓存”。...对比一下: 私有缓存:后续的请求会节省网络带宽,我们需要与API进行通信,但是API不需要把完整的响应返回来,如果资源没有变化的话只需要返回304即可。...组合使用过期模型和验证模型 可以这样做: 如果使用私有缓存,这时只要响应没有过期,那么响应直接会从私有缓存返回。这样做的好处就是减少了与API之间的通信,也减少了API生成响应的工作,减轻了带宽需求。...如果缓存的响应过期了,缓存就必须与API通信,但这也不一定就意味着响应必须被重新生成。...悲观并发控制意味着资源是为客户1锁定的,只要资源处于锁定的状态,别人就不能修改它,只有客户1可以修改它。但是悲观并发控制是无法在REST下实现的,因为REST有个无状态约束。

    86730

    REST API 的安全认证,从 OAuth 2.0 到 JWT 令牌

    ---- REST 是一种现代架构风格,它定义了一种设计 Web 服务的新方法。...和之前的 HTTP 以及 SOA 不同,它不是一个协议(即:一套严格的规则),而是一些关于 Web 服务应该如何相互通信的一些建议和最佳实践。...按照 REST 最佳实践开发的服务被称为 “RESTful Web 服务”。 安全性是 RESTful 服务的基石。启用它的方法之一是尽可能内置用户身份验证和授权机制。...OAuth 2.0 看起来像: 用户名 + 密码 + 访问令牌 + 过期令牌 工作原理: OAuth 2.0 标准的核心思想是,用户使用用户名和密码登录系统后,客户端(用户访问系统的设备)会收到一对令牌...就算有人截获了信息——谁在乎呢 ;) 英文原文:https://yellow.systems/blog/rest-security-basics ---- ----

    3.9K30

    用ASP.NET Core 2.1 建立规范的 REST API -- 翻页排序过滤等

    (从ASP.NET Core 2.0 迁移至 ASP.NET Core 2.1: https://docs.microsoft.com/en-us/aspnet/core/migration/20_21...pageIndex=12&pageSize=10 这里我喜欢使用pageIndex这个词,这也意味着页数是从0开始的;当然很多人喜欢用pageNumber等词,也就是说更喜欢页数从1开始,这个其实随意吧...所以如果返回这样的数据就违反了REST的规则了(尽管本文代码的Richardson成熟度最多也就是2级),它违反了自我描述的约束(请参考本系列的预备知识文章),API消费者不知道如何通过application...CountryRepository的GetCountriesAsync方法的返回类型,改成上面这个类型,所以它的接口ICountryRepository也需要改;而它的接口是整个项目的核心并放在Core...项目里,而整个项目的核心(合约)我个人认为应该是和具体的ORM无关的,但是这里依赖于EntityFrameworkCore了(ToListAsync())。

    1.6K10

    用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 + 项目准备

    什么是REST REST 是 Representational State Transfer 的缩写....REST的原则/约束 REST有6大原则/约束, 每一个原则都是对API有正面或负面影响的设计决定....RESTful API 最关心的有这几方面: 性能, 可扩展性, 简洁性, 互操作性, 通讯可见性, 组件便携性和可靠性. 这些方面被封装在REST的6个原则里, 它们是:  1....客服端-服务端约束: 客户端和服务端是分离的, 它们可以独自的进化. 2. 无状态: 客户端和服务段的通信必须是无状态的, 状态应包含在请求里的....缓存: 缓存约束派生于无状态约束, 它要求从服务端返回的响应必须明确表明是可缓存的还是不可缓存的. 6. 按需编码: 这允许客户端可以从服务端访问特定的资源而无须知晓如何处理它们.

    3K72

    用ASP.NET Core 2.0 建立规范的 REST API -- DELETE, UPDATE, PATCH 和 Log

    幂等性的核心概念可以理解为:"你可以发送多于一次的同样请求,但是不会对服务器造成额外的改变"。也就是说每次发送了DELETE请求之后,服务器的状态都是一样的。...在REST API里,我们有时也会遇到这样的需求。我们暂时把这个方法叫做Upsert (Update + Insert) 。那么问题来了应该使用POST还是PUT呢?...验证 为了进行输入验证(不验证输出),我们需要做以下三方面工作: 定义验证规则 检查验证规则 把验证错误信息发送给API的消费者 之前的文章也提到的ASP.NET Core里面定义验证规则的方式: Data...由于ASP.NET Core并没有内置的帮助方法可以返回422和验证错误信息,所以我们先建立一个类用于返回 422 和验证错误信息,它继承于ObjectResult: ?...最后还要为ASP.NET Core配置FluentValidation,在Startup的ConfigureServices方法里: ?

    2.4K20

    用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) + 准备项目

    可以看到logging的一些配置数据是从整体配置的Logging部分取出来的,然后配置了使用输出到控制台和Debug窗口的提供商。 记录Log的时候,通常情况下使用那几个扩展方法就足够了: ?...好的, 到现在我写一些临时的代码测试一下MyContext: ? 直接从数据库中读取Domain Model 然后返回, 看看效果(这次使用的是POSTMAN): ?...用REST的术语来说, 我们把客户端请求服务器返回的对象叫做资源(Resources)....所以我们把项目稍微重构以下, 把合约/接口以及项目的核心都放在MyRestful.Core项目里: ? 好的, 这次先写道这里, 项目已经做好了最基本的准备, 其余功能的扩展会随着后续文章进行....下面应该快要切入REST的正题了.

    1.3K00

    ASP.NET Web API路由系统:路由系统的几个核心类型

    虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集System.Web.Http.dll中)已经移除了对...也就是说,ASP.NET Web API核心框架的URL路由系统与ASP.NET本身的路由系统是相对独立的。...ASP.NET的路由系统通过RouteData对象来封装解析出来的路由数据,其核心自然是通过Values和DataTokens属性封装的路由变量。...另一个同样通过字典类型表示的只读属性DataTokens,我们应该不会感到陌生,至于通过制度属性Handler返回的HttpMessageHandler对象是组成ASP.NET Web API消息处理管道的核心...Web API管道的HttpConfiguration对象,这依赖于我们对Web API的寄宿方式,这并没有定义在ASP.NET Web API的核心框架之中。

    10.5K110

    Bookstore靶机实战:从Web枚举到REST API模糊测试的完整攻破

    枚举阶段我使用Nmap开始信息收集,扫描命令包含:-sC:等效于—script=default-sV:探测开放端口的服务/版本信息-p-:扫描所有端口发现22端口运行SSH服务,80和5000端口运行Web...服务:80端口:Apache 2.4.295000端口:Werkzeug 0.14.1 + Python 3.6在Werkzeug服务器发现关键路径:/robots.txt/api研究发现Werkzeug...0.14.1存在可能的RCE漏洞(参考Rapid7漏洞库)。...通过以下方式获取:对/api端点进行参数模糊测试发现v1存在未修补漏洞使用ffuf工具发现可利用参数:ffuf -u http://IP:5000/api/v2/FUZZ -w wordlist.txt...--hc 404权限提升通过获取的PIN码进入调试控制台使用Reverse Shell Cheat Sheet获取反弹shell发现SUID二进制文件try-harder逆向分析发现关键XOR运算:0x5dcd21f4

    16300

    从 MVC 到使用 ASP.NET Core 6.0 的Minimal API

    从 MVC 到使用 ASP.NET Core 6.0 的Minimal API https://benfoster.io/blog/mvc-to-minimal-apis-aspnet-6/ 2007...2012 年,也许是由于 ReSTful API 的日益流行,借鉴了 ASP.NET MVC 的许多概念又引入了 ASP.NET Web API,这是对 WCF 的重大改进,使开发人员能够以更少的仪式构建...后来,在 ASP.NET Core 中,用于构建网站和 API 的单一框架,这些框架被统一到了 ASP.NET Core MVC 中。...ASP.NET Core 6.0 旨在通过 Minimal API 弥合这一差距,以更少的仪式提供 ASP.NET MVC 的许多功能。...MVC 在 ASP.NET 之上添加的功能之一是模型状态。从文档[7]: 模型状态表示来自两个子系统的错误:模型绑定和模型验证。源自模型绑定的错误通常是数据转换错误。

    9.1K10

    现代 API 架构设计指南:从 REST 到高效集成的技术实践

    在当前的分布式系统架构中,API(应用程序编程接口)已成为软硬件解耦、实现数据流通的核心基石。无论是微服务间的通信,还是向第三方生态开放能力,API的设计质量直接决定了系统的可维护性与扩展性。...一、RESTful架构的核心约束REST(RepresentationalStateTransfer)作为目前互联网应用最广泛的架构风格,其核心在于将一切资源化。...三、API生态下的集成效率优化在实际开发过程中,开发者面临的挑战往往不是“如何写API”,而是“如何快速找到并集成高质量的API”。为了降低开发成本,技术团队通常会建立内部或参考外部的API目录系统。...工具类型代表方案主要作用文档生成Swagger/Redoc自动从代码注释生成可交互的接口文档联调测试Postman/Insomnia模拟请求、编写自动化测试脚本网关管理Kong/Apisix处理路由、限流...通过语义描述而非硬编码,未来的系统架构将能根据意图自动匹配并编排最合适的API路径。在这种演进过程中,保持API设计的规范性(尤其是遵循语义化版本控制SemVer)将显得尤为重要。

    32510

    Asp.net web api 知多少

    该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET MVC有更深层次的理解。...REST 使用 URI 以及(GET, PUT, POST, DELETE)方法来调用Service。 比REST慢 比SOAP快 Q4. 什么是ASP.NET WEB API? Ans....但是它并不是MVC框架的一部分。它是 ASP.NET 平台的核心部分。能被MVC或者其他类型的web应用使用。同时它也可以用作独立的web服务应用程序。...可以从以下几点进行考虑: 需要支持特别的场景,比如:one way messaging(单向通信),message queues(消息队列),duplex communication(全双工通信)等,选择...WEB API 的请求映射到Http动词对应的action;MVC 的请求直接映射到对应的action name。 ASP.NET WEB API是新的框架和ASP.NET框架核心的一部分。

    6.7K50

    .NET Core 3.1 的REST 和gRPC 性能测试

    在8年前我写过一篇文章:WCF和ASP.NET Web API在应用上的选择。...现在是2020年了,WCF换成了gRPC, ASP.NET Web API换成了ASP.NET Core Web API, 对外提供标准化的REST服务,内部通信采用gRPC的也是新时代的.NET应用程序的一个好选择...我们来看下.NET Core 3.1下REST和gRPC的性能表现怎么样? 从 https://github.com/geffzhang/RESTvsGRPC 下载代码。...REST API: cd RESTvsGRPC\RestAPI dotnet run -p RestAPI.csproj -c Release gRPC API: cd RESTvsGRPC\GrpcAPI...我要说的是,我们需要在您的业务案例中使用哪种协议的适当策略。我们通常在与外部世界的外部通信(例如外部服务集成,与前端的通信)中使用REST通信,内部服务之间通信采用gRPC。

    1.2K30

    互联网架构与通信机制:从边缘到核心的深度解析

    互联网的组成 互联网的边缘部分 从互联网的工作方式上看,可以划分为两大块: (1)边缘部分: 自由所有连接在互联网上的主机组成。...只要两个主机都运行了对等连接软件(P2P软件),它们就可以进行平等的、对等连接通信。 双方都可以下载对方已经存储在硬盘中的共享文档。 互联网的核心部分 网络核心部分是互联网中最复杂的部分。...网络中的核心部分要向网络边缘中的大量主机提供连通性,使边缘部分中的任何一个主机都能够向其他主机通信(即传送或接收各种形式的数据)。 在网络核心部分起特殊作用的是路由器(router)。...“交换”的含义 在这里,“交换”(switching)的含义就是转接——把一条电话线转接到另一条电话线,使它们连通起来。 从通信资源的分配角度来看,“交换”就是按照某种方式动态地分配传输线路的资源。...存储转发原理并非完全新的概念 在20世纪40年代,电报通信也采用了基于存储转发原理的报文交换(message switching)。 报文交换的时延较长,从几分钟到几小时不等。

    95010

    Java 核心工具类 API 详解(一):从 Math 到 Runtime 的实用指南

    一、Math 不需要背,要学会记一下类名和类的作用,养成查阅API帮助文档的习惯 是一个帮助我们用于进行数学计算的工具类 私有化静态方法,里面的所有的方法全是静态的 Math类的常用方法 package...-2147483647,那么取绝对值后就会返回2147483647 //可以索引到源码中的abs方法,发现abs方法的返回值是int类型,所以会返回-2147483648...System.out.println(Math.abs(-2147483648)); //ceil 向上取整 数学中的进一法,往数轴中的正方向取整,即大于等于该数的最小整数...,往数轴中的负方向取整,即小于等于该数的最大整数 System.out.println(Math.floor(3.9)); System.out.println(Math.floor...,于是我们可以从左边遍历,这样可以节省时间 public static boolean isPrime(int number){ for (int i = 2 ; i < Math.sqrt(number

    15610
    领券