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

什么是REST API

换句话说,应该可以按照任何顺序发出两个或更多的HTTP请求,并且会收到相同的响应(除非API被设计为返回随机响应)。 「可缓存」(Cacheable):响应应该被定义为可缓存或不可缓存。...缓存可以提高性能,因为没有必要为同一个URL重新生成一个响应。在某个时间段特定于某个用户的私人数据通常不会被缓存。...旧的版本最终可以被废弃,但整个过程需要仔细规划。 REST API认证 上面显示的测试API是开放的:任何系统都可以在未经授权的情况下获取数据。...它必须确认该应用程序是一个有效的客户端,但不需要检查用户凭证。 在其他情况下,第三方应用程序正在请求用户的私有数据,如电子邮件内容。...REST的难题导致Facebook创建了GraphQL--一种网络服务查询语言。把它看作是网络服务的SQL:一个单一的请求定义了你所需要的数据以及你希望它如何返回。

6K20

从零到一:一个 Web 全栈工程师的面试实录

我的代表项目是一个电商平台:前端用React实现动态商品展示,后端用SpringBoot提供RESTAPI,数据库用MySQL优化订单查询。...订单量大时,按时间/用户分表;用MyBatis做ORM,配合Redis缓存热点数据。在项目中,我实现读写分离,查询延迟降到100ms以内。解析:强调范式设计、事务ACID和性能优化。...问题3:微服务和单体架构的优劣?如何部署?我的回答:微服务解耦、可独立扩展,但复杂性高;单体适合快速迭代。...问题1:TCP三次握手的过程?为什么是三次?我的回答:三次握手是:客户端发SYN,服务器回SYN+ACK,客户端再发ACK。确保双向可靠连接,避免旧连接干扰。...我的回答:前端用CDN缓存静态资源,后端Nginx负载均衡,Redis缓存热点商品,MySQL分库分表存储订单,Kafka异步处理订单消息。监控用Prometheus+Grafana,部署在K8s上。

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

    别让完美架构杀死你的创业公司

    阶段二:有了前3个付费客户后的演进(第3-6个月)此时才引入的优化:Redis缓存热点数据(响应速度从500ms降到50ms)OSS存储大文件(节省服务器存储成本)ElasticSearch支持全文搜索...我建议:立即行动:推倒重来:用2周时间重建MVP,只保留核心功能简化架构:暂时回到单体应用专注价值:先让3个客户愿意付钱分阶段演进:0-3个月:验证产品价值,快速迭代3-6个月:优化性能瓶颈,引入缓存和搜索...他把这些年的经验总结成了一份"生存手册":MVP阶段的技术决策方法论RESTAPI设计的三个阶段阶段设计原则示例适用场景MVP期够用就好,一次返回全部数据GET/api/documents/1返回文档+...行动清单(拿走就用)如果你的公司处于MVP阶段(0-6个月)✓立即做:列出3个核心功能,砍掉其他所有功能用单体架构+MySQL+Redis,2周内上线RESTAPI保持简单,一次返回完整数据只做必要的安全措施...作者:老李,10年Java老兵,踩过所有的坑,现在只想让后来人少走弯路(如果这篇文章对你有帮助,请转发给正在创业的技术朋友)

    599112

    Vue设计与实现读后感-响应式系统实现-场景增强computed与watch(三)- 2

    这个过程我们可以理解为合并丢弃的过程,这个在数据请求处理场景上面,其实有些异曲同工之妙,比如我向后端发送10个相同的请求,其实正在有意义的是最后一个请求。大家可以想一想如何实现?...因为正在的开发是有这样的场景,需要我这么设计代码,而不是因为代码长这样,我得这么设计。 我们怎么实现当前开发的述求呢?...这个部分我表述的不清晰,是因为这边我的实现也不优雅,没关系,下次优化吧,继续进行下面的代码阅读不能阻塞,毕竟我先实现了,单元测试也过了哈哈。太过纠结于细节,这本书一年都搞不完。.... */ }) 有了前面computed实现铺垫,我们再去实现这个wacth就简单多了,我们其实只需要关注如何实现新值和旧值的回调就可以了。...api,我的整个实现过程其实是倒置的,不是为了解决什么问题,才设计什么api,而是因为api是那样,所以我这么去这么实现。

    1.9K50

    系统设计:粘贴复制背后的设计

    5.系统API 我们可以使用SOAP或RESTAPI来公开服务的功能。...成功插入后,服务器可以将密钥返回给用户。这里一个可能的问题可能是由于重复的密钥而导致插入失败。因为我们正在生成一个随机密钥,所以新生成的密钥可能与现有密钥匹配。...这是可以接受的,因为我们有68B唯一的六个字母的钥匙,这比我们需要的多得多。 它如何处理粘贴读取请求? 在接收到读粘贴请求后,应用程序服务层将联系数据存储。...数据存储将搜索该键,如果找到,则返回粘贴的内容。否则,将返回错误代码。...image.png 9清除或数据库清除 请参阅URL短链设计。 10数据分区和复制 请参阅URL短链设计。 11缓存和负载均衡器 请参阅URL短链设计。

    4.2K274

    分布式基础概念-分布式缓存

    如何避免缓存穿透、缓存击穿、缓存雪崩?缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉。...客户端缓存:页面和浏览器缓存,APP缓存,H5缓存,localStorage和sessionStorageCDN缓存:内容存储:数据的缓存,内容分发:负载均衡nginx缓存:静态资源服务端缓存:本地缓存...缓存可能更新失败,读到老数据先删缓存,再更新数据库。并发时,读操作可能还是会将旧数据读回缓存先更新数据库,再删缓存。...也存在缓存删除失败的可能最经典的缓存+数据库读写的模式,CacheAsidePattern。读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。...(缓存的三大问题)对线面试官-Redis(作为缓存的一致性问题)我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

    31510

    WordPress + UniApp 多端小程序开发笔记:架构设计与踩坑记录

    这部分主要是对WP_Query的封装,加上缓存和字段裁剪(小程序端不需要完整的WordPress文章对象,只返回必要字段能减少传输体积)。用户类:微信登录、积分、支付等。...微信登录这块需要注意code2Session接口的调用频率限制,我的做法是服务端拿到session_key后生成自定义token,后续请求用token鉴权,避免频繁调用微信接口。...列表页缩略图只请求300px宽度的图,详情页再加载原图。接口优化:WordPress默认的RESTAPI返回字段太多,一篇文章的JSON可能有几十KB。...自定义接口只返回前端需要的字段,列表接口的单条数据压缩到1KB以内。...缓存策略:服务端:用WordPressTransientsAPI缓存热门文章、分类列表等变化不频繁的数据客户端:UniApp的storage缓存用户信息和配置,减少重复请求八、部署备忘展开代码语言:TXTAI

    13410

    一个Bug搞懂浏览器缓存策略

    最近项目遇到一个问题,发版之后,用户需要清除缓存才可以访问到最新的应用,但是我们访问却可以正常。经过1天的研究搞懂了浏览器缓存的机制,记录下分析轨迹。...以及资源文件的ETag 是否等于 If-None-Match (ETag优先级高于Last-Modified) 如果相同则返回304,客户端使用缓存 如果不相同则服务器返回资源,且返回新的ETag 和...下面看下目前的请求和返回头。 因为Cache-Control: max-age=0 所以触发了强缓存的命中条件,同时如果本地没有强缓存的时候,触发协议缓存。...表现如下: 用户如果有强缓存则不访问服务器 (旧的系统) 如果之前没有访问的,没有强缓存或者失效的。...第一次访问服务器返回200和资源并记录ETag 和 Last-Modified,第二次会304 走协商缓存。 如何修改 系统更新,用户的强缓存没有过期,直接走了强缓存,导致没有访问服务器最新资源。

    52610

    JSP 防止网页刷新重复提交数据

    缺点:简单地运用Response.Redirect将不再有效,因为用户从一个页面转到另一个页面,我们都必须用客户端代码清除location.history。...后来,看到竟然有那么多的人想要禁用这个后退按钮,我也就释然(想要禁用的只有后退按钮,不包括浏览器的前进按钮)。因为在默认情况下,用户提交表单之后可以通过后退按钮返回表单页面(而不是使用“编辑”按钮!)...不过我注意到,如果使用这种方法,虽然用户点击一下后退按钮时他不会看到以前输入数据的页面,但只要点击两次就可以,这可不是我们希望的效果,因为很多时候,固执的用户总是能够找到绕过预防措施的办法。     ...这种方法的缺点在于:简单地运用Response.Redirect将不再有效,这是因为每次用户从一个页面转到另一个页面,我们都必须用客户端代码清除location.history。...,把插入数据库中的记录的自增长id号放到session里,当用户从第二个页面返回到第一个页面再一次提交该页面时,我就用session里的值去数据库查,如果有这个id就用update语句把第一个页面的数据写进数据库

    14.3K20

    bihash并不是线程安全的

    没有什么可以阻止更新程序更改读者当前正在查看的数据,甚至可以立即删除hash数据。此处是否可以正确工作的判定方法是我们是否可以对查找和更新操作的相对性能进行假设。...在查找的早期检查锁定可确保当前没有正在进行的更新。如果查找比更新快,那么可能存在一种情况就是bihash数据被清空掉。...事实上,我们在 clib_bihash_add_del_inline_with_hash 中有以下注释: 因为读取线程正在查看实时数据,所以我们必须格外小心。查询时不持有桶锁。...概率很低,因为哈希应该将它映射到相同的桶。 3.旧键与新值匹配。概率很低,因为查找应该在特定的位置被抢占以使查找发生。 尽管这些异常情况不太可能发生,但它们仍然是可能的并且可以被利用。...无论线程如何安排,我都希望拥有强大的功能。是否可以使用 vpp 基准测试实验室来评估所提议解决方案的性能影响? 最后,我想重新讨论读者锁定提案。我们的想法是我们不会在读取器路径中引入任何原子操作。

    1.2K50

    【译】antirez:Redis6将支持客户端缓存

    要记住缓存每个key和收到失效消息时的时间戳,记住每个slot的失效时间。当使用一个缓存的key时,先做一个懒清除,通过检查缓存key的时间戳是否早于slot收到失效信息的时间戳。...当时我在纽约街头思考这个想法。后来和一些朋友去吃午饭喝咖啡。当我返回酒店房间后,距离第二天起飞还有一整晚的时间,所以我开始按照一年前写的提案来写Redis 6的客户端缓存的实现。...因为我认为你想要有一个1亿key的服务器。然而一个失效信息影响的key不应该多于客户端缓存中的key。Redis中失效表占用130M的内存:8字节的指针指向16M的条目。...我们可能因为不能接收到失效消息而陷入麻烦。通常,应用会检测连接,尝试重连,并清除缓存。为了确保失效连接处于连接状态,不时地向服务器发送ping请求可能是一个更好的主意。...我希望这足以刺激你的胃口:如果我们在Redis中运行的很好,然后记录下来,让客户端作者知道该如何支持,数据可能比以往更接近应用程序,甚至在小型团队运行的应用程序中,到目前为止还没有尝试客户端缓存。

    87320

    WorkBox 之底层逻辑Service Worker

    ❞ 如何查看Service Worker 要查看正在运行的Service workers列表,我们可以在Chrome/Chromium中地址栏中输入chrome://serviceworker-internals...需要定期地清理缓存条目,因为每个浏览器都硬性限制了一个域下缓存数据的大小。 缓存配额使用估算值,可以使用 StorageEstimate API 获得。...客户端 当说一个service worker正在控制一个页面时,实际上「是在控制一个客户端」。客户端是指URL位于该service worker作用域内的「任何打开的页面」。...❞ 默认情况下,新的service worker将在「没有任何客户端由旧的service worker控制时激活」。这发生在相关网站的所有打开标签都关闭时。...这个子面板还包含一个清除站点数据按钮以及一整套相关的复选框,用于在单击按钮时清除哪些内容。其中包括任何打开的缓存实例,以及注销控制页面的任何活动Service Worker的能力。

    1.7K20

    什么是错误代码504,怎么解决

    当您向服务器发送请求时,它通常会将请求转发给其他服务器或网关来处理,然后将响应返回给您。如果网关在一定的时间内无法从上游服务器收到响应,就会发生504错误。...这可能是由于服务器负载过高、应用程序处理时间过长、数据库查询复杂等原因引起的。 2. 网络问题:网络连接的问题也可能导致504错误。这可能是由于中断的网络连接、不稳定的网络连接或数据包丢失导致的。...清除缓存和Cookie:清除浏览器缓存和Cookie,然后重新加载页面。有时候,旧的缓存数据可能导致504错误。 6. 检查代理设置:如果您使用代理服务器,请确保代理设置正确,并且代理服务器工作正常。...清除缓存和Cookie。 6. 检查代理设置。 7. 联系网站管理员。 记住,错误代码504通常是由服务器向网关的请求超时造成的。...这可能是由于上游服务器响应超时、网络问题、代理或负载均衡器故障、或配置问题引起的。以上解决方法旨在排除临时问题和客户端因素,但仍需要视具体情况而定。

    3.2K10

    详解关系型数据库运作机制

    一说到关系型数据库,我总感觉缺了点什么。如果你尝试透过“关系型数据库是如何运作的”的关键词句来进行搜索,其搜索结果是少量的而且内容是简短的。...关系型数据库实际上是非常有趣的,因为它是基于实用和复用的概念。但是限于篇幅,以下我将把重点放在数据库如何处理SQL查询的问题上。...他们对于所使用的算法和数据结果是了然于胸的,因为他们很注重在计算机配置较低时于CPU和内存上的开销。在这一节,我首先要介绍的是数据库索引。...数据获取是数据库中最慢的操作,因此数据管理必须要能高效地获取并数据存放在内存缓冲区。 那么关系数据库是如何解决这两个问题的呢? 缓存管理器 如前所述,数据库的主要瓶颈是磁碟I/O。...在LRU-K中: 首先考虑数据的K次最近使用记录;根据数据的使用次数分配权值;如果有新的数组载入缓存,旧的但经常使用的数据不会被移除,但是当旧数据不再使用,将会被移除,所以权值的设立有助于减少多余数据。

    75820

    Redis高频面试题

    解决方案: 1.查询返回的数据为空,仍把这个空结果进行缓存,但过期时间会比较短; 2.布 隆过滤器:将所有可能存在的数据哈希到一个足够大的 bitmap 中,一个一定不存在的数据 会被这个 bitmap...答:假设采用的主存分离,读写分离的数据库, 如果一个线程 A 先删除缓存数据,然后将数据写入到主库当中,这个时候,主库和从库同 步没有完成,线程 B 从缓存当中读取数据失败,从从库当中读取到旧数据,然后更新至缓...存,这个时候,缓存当中的就是旧的数据。...处理思路:在从库有数据更新之后,将缓存当中的数据也同时进行更新,即当从库发生了 数据更新之后,向缓存发出删除,淘汰这段时间写入的旧数据。 35、主从数据库不一致如何解决?...1.代理分区意味着客户端将请求发送给代理,然后代理决定去哪个节点写数据或者读数据。代理根据分区规则决定请求哪些Redis实例,然后根据Redis的响应结果返回给客户端。

    1.2K30

    从全栈工程师视角看互联网大厂面试实战:技术深度与业务场景的完美结合

    今天我们会聊一些技术问题,看看你在实际项目中是如何应用这些技术的。 **应聘者(张明)**: 李工您好,很高兴能来面试。...**面试官(李工)**: 好的,那你对JVM的垃圾回收机制了解多少? **应聘者(张明)**: JVM的GC机制分为多个阶段,比如新生代和老年代。常见的GC算法有标记-清除、标记-整理、复制算法等。...你之前做过什么类型的项目? **应聘者(张明)**: 我之前参与了一个电商平台的重构项目,主要负责后端服务的迁移和前后端分离的实现。...**面试官(李工)**: 很好,看来你对Spring Cloud有一定的实践经验。那你在项目中有没有遇到过性能瓶颈? **应聘者(张明)**: 是的,我们在高并发场景下遇到了数据库压力过大问题。...- `state` 函数返回当前状态对象。 - `actions` 包含修改状态的方法。

    14210

    再乱用缓存,cto可就发飙了!

    ,又有人小声嘀咕,让总监的脸色越来越沉。 "你们觉得我在开玩笑么?",总监红着眼说,“我就曾经因为这样的数据不一致问题,吃过一个一级故障。正好,今天就带你们了解一下,为什么会有数据不一致的情况吧”。...规则是:先更新db,再删除缓存 。详细步骤如下: 将变更写入到数据库中 删除缓存里对应的数据 说到这里,我看着有几个人皱起了眉头。我知道,肯定会有人不服气,认为自己那一套是对的。...如上图,写请求首先删除了缓存。结果在这个时候,有其他的读请求,将数据库的旧值,读取到数据库中,此时缓存中的数据是0。接下来更新了DB,将数据库记录改为了100。...,清除某些缓存值。...正在大家想要把掌声送给总监的时候,一个不和谐的声音传来了。 我发现了一个天大的问题。 有同学说, 如果数据库更新成功了,但缓存删除失败了,也会造成缓存不一致。

    39420

    Identity Server 4 - Hybrid Flow - 保护API资源

    这个系列文章介绍的是Identity Server 4 的 Hybrid Flow, 前两篇文章介绍了如何保护MVC客户端, 本文介绍如何保护API资源....图里有IDP (Identity Provider, 我例子里是用Identity Server 4构建的项目)和客户端(我的例子里是MVC客户端)....保护API 首先在IDP里配置一个返回ApiResoruce的方法: ? 和IdentityResource类似, ApiResource就是与API相关的scopes....我在API项目里使用过滤器为所有的Controller都加上了授权过滤: ? 当然也可以在具体的Controller或Action级写上这个: ? 无论如何现在访问Country资源是需要授权的....这个属性说明这个access token是为它们俩准备的. 而scope里面的“restapi”就是aud里面的“restapi”, 所以这个token允许被用来访问我们的“restapi”.

    89420

    听GPT 讲Alertmanager源代码--api

    swaggerSpecCacheMx、swaggerSpecCache、swaggerSpecAnalysisCache:这些变量用于缓存和管理Swagger规范的全局变量。...它接受一个可选的ClientOption参数,用于配置客户端选项,并返回一个初始化后的客户端实例。...WithPayload函数:用于设置响应的返回数据。它接受一个payload参数,并返回一个函数类型,用于设置实际返回数据的结构体。 SetPayload函数:用于设置实际返回数据的结构体。...提供示例代码和用法说明:在doc.go文件中,开发人员通常可以提供一些示例代码片段或代码片段,以演示如何使用和集成这些资源文件。这有助于其他开发人员更好地理解如何使用这些文件,并在需要时提供参考。...这些函数的作用是在Alertmanager的API层与内部逻辑层之间进行数据格式转换、映射和适配,确保API请求和响应与内部逻辑的数据格式兼容,并提供统一的接口给客户端使用。

    87640

    为什么要使用 GraphQL?【Programming】

    image.png 正如我之前所写, GraphQL是下一代API技术,它正在改变客户端应用程序与后端系统的通信方式以及后端系统的设计方式。...使用传统的RESTAPI端点,客户端应用程序可以查询服务器资源,并接收包含与请求匹配的所有数据的响应。...如果来自RESTAPI端点的成功响应返回35个字段,则客户端应用程序将接收35个字段 提取问题 传统上,REST API无法为客户端应用程序提供唯一的方法来仅检索或更新他们关心的数据。...并非只有“过度获取”,相应的,“欠获取”也是存在的。缺省情况下,只返回客户端实际需要的部分数据的端点需要客户端进行额外的调用以满足其数据需求——这需要额外的HTTP请求。...一些示例包括: 围绕REST API的缓存机制更加成熟。 用于使用REST构建API的模式已经非常完善。

    1.4K00
    领券