你是小阿八,刚入职的后端程序员,负责给前端的阿花提供 api 接口。结果一周后,你被阿花揍得鼻青脸肿。你是我这辈子见过接口写的最烂的程序员。你一脸委屈,找到号称开发之狗的鱼皮诉苦,哎,接口不是能跑就行吗? 鱼皮嘲笑道,小阿爸,你必须得学学 rest for api 了。阿爸阿爸,什么玩意儿?没听说过。首先, rest 的 全称是 representational state transfer, 翻译过来叫表现层状态转移。 你一脸懵,鱼皮爹爹能说人话吗?我是傻子,听不太懂。别急,我给你拆开来讲,保证你理解。先看 r e。 表现层是指资源的表现形式。 呃,什么是资源?资源就是你想要操作的数据对象,比如用户、商品、文章,这些都是资源。用户列表是一个资源,某个具体的用户也是一个资源。 表现层是指资源呈现出来的具体格式。比如同一个用户,资源可以用 jason 格式返回给客户端,也可以用叉 ml 格式返回,这就是不同的表现形式。 s 是 指状态。 啥是状态?比如你登录网站后,服务器会在内存中记住你是谁,之后在网站上操作,就不用再次登录了,这就是有状态。而无状态呢,就是服务器不记录客户端的任何信息,每次请求都是独立的。 哦哦哦,就像一个人去餐厅吃饭,服务员不记得他上次点了什么,每次都要重新点单,这就是无状态。反过来,服务员记得他爱吃鱼皮,这就是有状态。 没错,接下来是 t 转移。要注意,转移是双向的,当你用 get 请求时,服务器把资源的状态转移给客户端,当你用 post 请求时,客户端把资源的新状态转移给服务器,从而改变服务器上资源的状态 组合起来。 rest 是 一种软件架构风格,让客户端和服务器通过统一的接口,以无状态的方式互相传递资源的表现层数据来查询或者变更资源状态。而 for 是 个后缀,就像 power 充满力量的一样,表示充满某个特性的。 因此, restful api 是 指符合 rest 架构风格的 api。 注意,它不是协议,不是标准,不是强制规范,只是一种建议的设计风格,你可以遵循,也可以不遵循。你挠了挠头,说了一大堆, restful api 到底长啥样啊? 举个例子,比如你要做着用户管理系统对用户信息进行增删改查,用 restful 风格的 api 就 长这样。 哇,比我写的整齐多了,快带我学一下 restful 的 写法吧,我要让前端阿花刮目相觑。好很有志气,接下来我会带你一步步构造一个完整的 restful api, 分 为两部分,客户端发送请求和服务端给出响应。 先来构造客户端请求,第一步是确定资源,资源用 u r i 统一资源标识符来表示,核心原则是用名词来表示资源,而不用动词。具体来说,推荐用名词复数表示资源集合。比如 users 表示用户列表, products 表示商品列表。 如果要操作具体某一个资源,就加上 id, 比如 us 杠一二三,表示 id 为一二三的用户资源,还支持嵌套,比如 us 杠一二三杠 alt 表示用户一二三的所有订单。 呃,那还可以正深层级吗?比如表示用户一二三的订单,四五六。鱼皮点点头,你的理解完全正确,但不建议嵌套层级太深。 确定了资源后,接下来要选择动作,也就是你想怎么处理这的资源。 restful api 主要通过不同的 http 方法来表示,增删改查操作、 get 查询资源、 host 创建资源、 put 完整更新资源、 patch 部分更新资源和 delete 删除资源。到这里,一个基本的 restful api 请求就构造完成了。呃,就这么简单,我不满足,还有正着急的写法吗? 当然有,有时我们需要更精确的筛选数据,这时候就可以加查询参数,比如分页、过滤和排序 等等。这查询参数跟 restful 有 啥关系?正常的请求不都是这么写吗?确实,查询参数本身不是 restful 特有的,但 restful 风格强调把筛选、排序、分页这些操作都通过 url 参数来表达,而不是在请求体里传一堆复杂的 json 对 象。 这样一来, u r l 更清晰。而且浏览器 c、 d、 n 代理服务器都能直接根据 u r l 来缓存响应结果,不同的 u r l 可以 分别缓存,更容易区分。 随着业务发展,接口还可能需要升级。为了不影响,老用户可以在 u r i 中标明版本,这样老用户继续用 v 一, 新用户用 v 二,互不影响。 此外,你还记得我们前面讲 rest 里的 s t 状态转移吗? rest for 的 核心原则之一是无状态客户端,每次请求必须包含所有必要信息,服务器不记录客户端的状态。比如用户登录后,不是让服务器记住你已经登录了,而是每次请求都要带上身份凭证,就像这样, 这么做的好处是,服务器不用记录,谁登录了谁没登录,每个请求都是独立的,这样一来,你想加多少台服务器都行,任何一台都能处理请求,轻松实现覆盖、均衡和横向扩展。你点头如捣蒜,怪不得我调用 ai 大 模型 api 的 时候就要传这这 toc。 讲完了客户端请求,再来看看服务器收到请求后该怎么响应。主要注意两点,首先是统一响应格式,目前大多数 restful api 基本都使用 jason 格式,因为清量容易解析,但这并不是强制的,也可以用叉、 ml、 html 等格式。 而且响应要带上合适的状态码,让客户端一眼看懂发生了什么。 http 状态码有很多,大致可以分为五类,重点关注。二叉叉表示成功,三叉叉表示重定向,四叉叉表示客户端错误,五叉叉表示服务器错误。 哦,俺懂了,以后前端看到五零零就知道是我,后端的锅看到四零零就知道是它。自己参数传错了,谁也别想甩锅。嗯,不错。以上这些就是 restful api 的 基本写法,你学废了吗? 学废了学废了。那我来考考你下面哪个是标准的 restful api? 你 开心的怪叫起来,阿爸,肯定是 c 啊, 错, no, 四个全都不标准。 a 用了动词, b 用了单数和动词, c 用 post 查询还带了动词, d 用 get 删除还带了动词。你掉了根头发 啊,原来这么严格。等等,你说 restful 不 能用动词,但有些操作不是标准的增删窄查,比如用户要支付订单,该怎么设计接口呢?是要这样写吗? 鱼皮摇摇头,你已经很努力了,但呸,是动词!更标准的设计是把支付行为看作创建一个支付记录用名词,而不是动词。 比如这个请求表示为订单幺二三创建一笔支付记录。你又掉了根头发,妙啊,怪不得说英语对学编程有帮助呢。我悟了,不错,学到这里,你已经掌握了 restful 的 百分之八十能够实际应用了。 接下来的知识,你只需简单了解一下,就能拿去和面试官吹牛皮了。比如很多同学都不知道, restful 其实有六个约束条件,包括客户端、服务器分离、无状态、可缓存、 分层系统、统一接口,还有按需代码。你直接听蒙了,阿爸阿爸,这么多约束,我必须全遵守吗? 可以不用, restful 只是一种 api 的 建议风格,在实际工作中,很少有 api 能完美符合所有约束,大家可以灵活调整,甚至什么接口都用 post 加动词一把缩, 只要团队达成一致,用的舒服就行。就像刚才那个支付订单的例子,虽然用名词符合 restful 规范,但有同学会觉得用动词更直观易懂也没问题。不过现阶段,我建议你先养成遵循 restful 的 好习惯,写出更漂亮的接口 喔。但我只是个小阿巴,背不下来这些写法,我怕自己写着写着就不规范了,怎么办啊? 别担心,有很多方法可以帮你快速实现和检查 restful api。 一、 使用开发窗架几乎所有主流开发窗架都支持 restful api 的 开发,它们能帮你自动处理很多细节,比如 java 的 spring boot, python 的 java 的 ginn, 这些框架虽然不强制你遵循 restful, 但用它们的特性开发起来既轻松又规范,帮你省掉大量重复代码。二、使用 ide 插件,比如 ide 二的 restful toolkit 插件,可以快速查看和测试接口。还有 vs code 的 rest client 插件,可以直接在编辑器里测试接口。 三、利用 ai 生成 restful, 有 明确的设计规范,而 ai 最擅长处理这种有章可循的东西。比如直接让 curser 帮你用 spring boot 写一个用户管理的 restful api, 你 只需要啊吧啊吧几下,它就能生成规范的代码。 写完接口后,还可以用 swagger 这类工具自动生成漂亮的接口文档,直接甩给前端,对方一看就懂,还能在线测试接口,省去大量沟通成本。你笑得像个孩子。 这么一看, restful api 不 仅上接口规范统一,还能提高开发效率,降低团队沟通成本,前后端都舒服爽爽爽! 没错,这也是为什么 restful 能成为业界主流的原因。学会了,学会了,我这就去重构所有接口,让前端阿花刮目相看。一周后,你把所有接口重构成了 restful 风格。前端阿花打开新的接口文档,眼睛亮了, 小阿巴,你居然开窍了!你得意地笑了,那是,我可是学过 restful 的 男人!阿花,晚上要不要一起?阿花朝你吐了口唾沫, 呸,你只不过学了一种 api 风格就得意洋洋,我阿坤哥哥不仅精通 restful, 还能手撕 graph q r 和 g r p c 呢,你行吗?呃?啥啥啥?这都是啥?玉皮弟弟快来救我!
粉丝46.3万获赞223.2万

三分钟带你了解什么是 restful api, 如果你现在没空,先点个赞存一下,回头慢慢看。 restful api 全称是 representational state transfer, 翻译过来叫表现层状态转移。 是不是一听这名字就头大?别急,我用人话跟你说,它就是一种设计 web 服务的架构风格,说白了就是一套让不同软件之间能好好说话的规矩。 你想啊,现在到处都是 app、 小 程序、网页,它们背后的数据和服务都放在服务器上,那你的手机怎么跟服务器要数据发数据呢? 就得通过 ipi 这个接口,而 restful ipi 就是 目前最流行最常用的一种接口设计方式,你可以把它理解为互联网世界里的通用快递协议。它的核心思想特别简单,就四个字, 看, u r e o。 说话。在 rest for a p r 的 设计里,你把网络上的所有东西,比如一个用户,一篇文章、一张订单,都看作是一种资源,每个资源都有一个唯一的地址,就是 u r o, 比如 u s s one hundred twenty three。 这就代表 id 是 一二三的那个用户资源,光有地址不行,你怎么对这个资源进行操作呢?这时候就要用到 h t t p 方法了,也就是我们常说的 get post 的 delete, 它们对应着最基础的四种操作,查、增、改、删。 你想获取用户幺二三的信息,那就用 get 方法去访问 users one hundred twenty three 你 想创建一个新用户,那就用 post 方法把用户数据发给 users。 你 想修改用户幺二三的名字,那就用 p u t 方法把新数据发给 users。 我 喊着 twenty three, 你 想删除用户幺二三, 那就用 delete 方法访问 u r o 一 hundred twenty three 看到没?同样的 u r o serves one, hundred twenty three 用不同的 h t p 方法就代表了完全不同的操作,这就是 restful api 的 精髓之一。通过 url 定位资源,通过 http 方法定义操作, 是不是比那些乱七八糟的把所有操作都塞进 u r 参数里的设计清晰多了?接下来是关键, rest for api 是 无状态的,什么意思?就是说服务器不会记住你上一次干了啥, 每一次请求都必须自带所有需要的身份信息和参数,就像你去银行办业务,每次都得出示身份证一样,这样设计服务器压力就小,也更容易扩展。 然后资源的表现形式是可以多样的,同样一个用户数据,服务器既可以给你返回之森格式,方便程序处理,也可以返回 xml 格式,或者干脆是 html 网页,方便浏览器直接看 客户端。只需要在请求头里说一声我要 jason, 服务器就知道该给你什么包装了。 最后一个设计良好的 restful api 应该是自描述的,并且利用好 http 本身的状态码。比如你创建一个资源成功了,服务器就返回二零一 create, 你找的资源不存在就返回四零四 no fun, 你 没权限就返回四零三 forbids 你 的程序一看状态码就知道大概发生了什么,而不需要去解析一堆错误信息。 所以总结一下, restful api 就是 用 url 表示资源,用 http 方法操作资源遵循无状态通信, 并且利用好 h t t p 协议本身特性的一套优雅的设计规范,它让前后端分离变得清晰,让不同系统之间的集成变得标准。现在你去看那些大厂的开放平台接口,十有八九都是按这个风格来的。 好了,关于 restful api 的 快速入门就先聊到这,如果你对某个细节还有疑问,或者想了解其他技术概念,欢迎在评论区留言,我们下期再见!

面试官问 rest of four? 别瞎扯,说三个。我常用的用 http 方法表示操作, get 查 post 增 put 改,比如查订单用 get orders 一 url 别带动词,之前有人写 get order, 面试官直接摇头,返回状态码要对,成功要两百,没找到用四零四。 此外还有两个进阶点,面试官爱听,一是版本管理,比如把版本号放在 u l 里 v e orders 或者 hp 头里,方便后续升级。二是用好 hp 状态码家族,二开头成功,四开头客户端错误,向四零幺未授权,四零三禁止访问, 五开头辅导错误,让调用方一眼能看出问题方向。我这么设计,接口前的同事说超好解。如果你简历缺乏有深度的项目,这边给你打包好了,十多个 a 整的智能体开发的企业级项目,粉丝群找老樊领取就行。你设计过 a p i 吗?评论区说说。

仅四行代码便可实现编程,是的,你没有听错,下面我们就用这四行代码来看一下效果。首先我们先来启动一下这个项目, 然后出现这个 spring 就 可以,就可以就证明这个项目运行成功了。 然后我们来重新打开一个浏览器吧啊,访问 http, 点 logo house 问号,八零八零斜杠地址,然后 我们在后台编辑的代码就可以通过浏览器进行访问了。那么教程开始,首先呢打开这个 ide 编辑工具, 然后我们就新建一个项目, 这个名称随便起,这个位置就放在自己此盘对应的位置。语言呢,选 java 类型,选择 mamem 这个组的话,这个可以改一下,也可以不改,就软件包名称的话啊,就不要那么长了,删一个吧, 然后下一步,当然我们要想通过浏览器来访问我们的这个接口的话,我们肯定要有一个 spring web 的 依赖。 然后呢我们的像代码就写在这块了,就是这个 java 语言的这个包下面啊,我们呢再新建一个包, 叫做 ctrl 了,这也是, 然后起一个类吧,就叫做测试类吧, 这个名字要是不规范写的话也没啥问题, 那么这儿呢,这个是关键了,必须写这个 rescon control 了,不然的话它是访问不到的。然后呢我们就写一个 给它返回一个,这个这是返回类型,就是我们要返回什么样的数据, 返回一个,这是一个接口,可以在浏览器查完。 好了,现在呢就写完了。然后呢我们来运行一下, 运行的话有一个这个什么 application, 也就是这个项目名加 application 这个类里边,然后点击这个三角,然后运行项目 好了,到这呢这个项目就运行起来,它这有一个 spring, 它就 它就是运行起来了。然后呢我们可以把它全部清掉,然后来访问一下,我们在浏览器来访问一下, 我们重新打开一个界面,然后输入 h g、 c p 码,七个,七个 local house 的, local house 的 呢?但是我们, 我靠,你靠靠,我又忘记写, 我,我,我刚才忘记写地址, 写地址的话我们要发送 get 请求,所以我们给他起个名字就叫做 重新运行一下,我们的项目还是刚才的那个 类里边停止并重新运行一下, ok, 现在可以访问了,还是重新写一遍吧。 google house, google house 呢?是我们本机的地址,八零八零,端口是我们开放端, 然后写这个路径地址好了,你看是不是他就访问出来了,他就返回,返还这个前端就返还出来这个字母叉了, 他也对应着我们这块的这个数据你学废了吗?

为什么一个简单的登录接口,后端开发要写几百行代码?假如你要写个登录功能,先写五行, ctrl 接收参数,三行 dto 校验判空,五行调用 usermap 查库比对,六行用 bcrap 加密校验密码,七行生成山 diy dob t token 存入 reddis, 最后再用五行统一返回接层格式。当你以为一切都没问题的时候,结果项目上线第二天就出现同一个 ip, 同一个设备,甚至同一时间段尝试了几万次密码,全是脚本小子在进行暴力破解。所以你又写了四十行代码,用来防止恶意攻击。接入 radis 做 ip 限流,加上图形滑动验证码、 user agent 特征过滤以及设备指纹风控,你心想现在总不会出问题了。没想到搞活动高病发来了,大量用户在同一时间登录,后台竟然出现了两个用户拿到了同一个 token, 甚至数据库死锁,一咬牙给数据库字断加上了唯一锁影,但是又爆主键冲突,一旦用上 radis 分 布式锁才解决并发症, 你以为能松口气了,谁知道用户又反馈登录收不到验证码,你又熬夜加上了消息队列, rabbit m q 做异步解偶三家短信供应商轮询失败就自动重试,用户还是收不到,再触发补偿机制。结果又有羊毛党鞋脚本,一天给你点了几千条短信接口,烧了你半个月工资, 你火急火燎的再加上同一个手机号单日发送上线和不隆过滤器,这还仅仅是一个登录,如果再加上订单支付这些核心功能,你这头发顶得住吗?关键还有一点,要是一次性把功能都写好了,后面公司还要你干什么呢?


今天跟大家分享一个开源的一个框架,叫做媒体 api, 在 传统后端项目开发中,我们可能要写 control 层、设备层、 map 层这样一个上层架构,那对于我们中小公司或者是对于我们这样的一个甲方企业来说, 呃,效率会比较低。那我们使用这软件这开源框架来说的话,就直接能够在网页端去写社口, 拿到社口之后还能够写相应的一个呃,数据处理的一个逻辑啊,点击保存之后就能够立即生效就是。并且呢,原来我们为服务还要一系列的去呃跑流水线去发版这样子,那直接灭绝 ipad 就是, 所见即所得,你写完之后立刻就能上线。 那对于中小型公司来说,为了快速的完成需求,完成任务,那么这样的一个软件是非常好用的。呃,然后它还支持多数据源,还有一个是定时任务。 当然这个开源框架的话,对于大型项目来说,可能还是使用传统的一个开发方式比较合适。那媒体 a p i 的 话,我个人认为是适用于在企业内部做一些呃表单流程啊,这样一些简单的场景上去使用是没有问题的。

刚挂了一个做交易系统的 java 开发,我问你们的核心交易接口压测时 t p s 到一千就上不去了,但 cpu 和内存都没打满,你怎么系统性的定位瓶颈?他说可能是数据库连接池不够或者缓存没生效。我追问你怎么验证是 i o 问题还是 cpu 问题? 如果是锁竞争,怎么找到热点锁?如果是序略化问题,怎么证明并优化?直接给他干。沉默了,回答不上来。面试结束,高并发接口调优需要从外到内层层深入掌握四个关键层次。如果这道题目你也不会回答的话。 我整理了让大厂 hr 沉默的必考题库,包含 jvm 夺命连环问 spring 灵魂八谷高并发必杀场景, radis 深度陷阱点个赞,评论区甩六六六,打包带走 nice。 第一步,建立全链路监控体系,应用层 micrometer 加 prometheus 监控 qps 二 t 错误率, jvm 层 gc 频率现成状态,对外内存使用系统层 cpu 利用率 i o 等待网络流量 中间建层,数据库连接池使用率, radis 斜杠 mq 的 响应延迟。第二步,识别瓶颈类型, cpu 瓶颈,使用 artis profiler 或 ace profiler 抓取火焰图看热点方法 锁竞争 j stack 查看线呈堵塞状态,或用 artist thread 杠 b 找死锁 i o i 瓶颈, 观察 i o o stead await 指标或数据库慢查询网址,网络瓶颈,跟踪 tcp 重传率连接受限制。第三步,针对性优化策略,减少锁力度,用 concern high map 代替 second map, 用 longadder 代替 atomic long 异步化处理 complexable future 实现非阻塞调用,避免线程池阻塞。序列化优化,用 problab 代替 jason 或用 krio 提升序列化速度。 连接池调优调整 hcgp 的 最大连接数,空闲超时时间。第四步,压测验证与极限优化。阶梯式压测从低到高逐步增加并发观察拐点。全链路压测使用分布式压测工具模拟真实流量分布。 极限优化考虑无锁数据结构、堆外内存、零拷贝等技术。牛逼 牛逼!这道题考察的是对性能瓶颈的系统性分析能力和全链路优化思维,这是架构师的核心能力。你优化过性能最差的接口 pps 是 多少?最终提升到了多少?

我们来看一下 java io api pass 接口介绍 pass 接口在 java 七引入功能,它是 java nio file 的 主要入口之一。如果应用程序要进行文件 i o 操作,学习并使用 pass 接口,将提供更强大、更灵活的文件操作功能。 如果代码使用的是 java 七之前的 java i o file 类,那么仍然可以利用 pass 接口的功能。方法是通过 field 通 pass 将 pass 对 象转换为 pass 对 象。 然后我们看一下 pass 接口的系统概念。 pass 接口提供了一个程序化的文件系统路径,表示。一个 pass 对 象,包含了文件名和构建路径所用的目录列表,并且可以用来查看定位和操作文件。我们来写个事例, 在这个事例中,我们通过 pass 的 get 创建一个 pass 指令,它表示这个文件的路径。 pass 接口并不是跨平台独立的,它反映了底层平台的文件路径格式。在不同的系统上, pass 表现方式有所不同。 在 unix 操作系统中, pass 它类似于正斜杠的路径写法,在 windows, 它类似于反斜杠的写法。 因此呢,不能将两个系统和 pass 进行比较,即使它们指向的是相同的文件,或者是相同的目录结构。我们来看如下实力,正斜杠呢是 unix linux 系统反斜杠的 windows 系统, 然后呢,输出的值可能是因操作系统而不同。我们来看一下常见的 pass 操作。一旦创建了 pass 指令,可以执行多种操作,包含路径的拼接。而通过 pass 的 result 或 pass 的 result 程序可以拼接在一起,也可以通过 get fill name, get parent, get route 领取路径的各个部分。 通过 path 点 e 口的比较,路径是否相同啊,我们来试一下。这里我们创建两个 pass 对 象,然后通过 pass 一 拼接 my fill 滤镜,然后这是拼接后的路径。获取拼接后的文件名或路径,并且判断两个路径是否相同。 这回 false 呢,是因为它返回的是上面时的录文件。用打印机下路径可以看到 pass 一 和 pass 二我们是不同的,所以返回 false。 在 使用 pass 时,它呢会与 files 类配合来执行文件。 files 提供了许多方法,例如键盘路径这样的文件是否存在, 比如创建文件, sql 文件,修改文件权限等。我们来试一下, 这里呢,我们判断创建,判断文件是否存在,如果文件不存在,创建文件 这里创建一个 plus 对 象。三、创建文件 这里呢?我们创建一个三 d 七文件,然后判断文件是否存在,如果不存在,创建文件,从而分别通过了 exist 和 not exist。 我 们来打开目录看一下,可以看到创建的错文件。 最后我们总结一下, python 接口为 java 文件 i o 操作提供了更灵活强大的功能,可以方便的操作文件路径,检查文件是否存在,拼接路径,提取路径信息等。集合 field 可以 高效的处理各种文件的目录,操作好测试备战内容。

这个视频来看一下接口健全,我使用的是 sa 托肯这个空架,首先在需要健全的接口上添加上这个注解,里面是这个接口的全线标识, 然后我们来实现空架提供的这个接口,它里面有两个方法,一个是获取权限标识,一个是获取角色。由于我这个项目是通过这个权限标识来进行健全的,那么我只要在这个接口里面查询到当前登录用户拥有哪一些权限就可以。 这里你可以来看一下我的这些权限的话,全部是把它存到 root 四中, 可以看到当前登录用户的话有这些权限。这个方法里面空架,它提供了当前登录用户的 id, 那 么我们这里去 read 中拿去当前登录用户拥有哪一些角色就比较方便,拿到之后我们把它转成类似的再返回去就可以。 下面来看一下这些权限是在什么时候放到 res 中的。一般来说大家的做法的话,通常会在用户登录的时候就把这些角色或者权限之类的查出来,放到 res 中,我的话这里是单独写了一个接口来查询这个用户拥有的权限, 然后的话把它存到 res 中,这些接口就没有什么难度,里面都是正常的查询。这里的话涉及到一个远程调用, 当前这个服务的话是用户服务,然后的话用户的权限的话它是存在了系统服务里面,所以的话这里需要一个远程调用。这里你可能会有个疑问,就是当前登录用户的 id 是 怎么拿到的,那么这里的话可以到 ctrl 来看一下, 这里这个 s a 托管框架给我们提供了一个工具,那么通过这个工具的话,就可以拿到当前登录用户的 id, 这个时候你再反过来看,当用户登录的时候,这里重新写了一个接口,来拿取这个当前登录用户拥有哪一些权限,然后把这个权限存到 ready 四中。 当用户来请求这个这些接口的时候,他这个空间就会通过这个注解来判断, 然后的话调用这个接口,只有当用户拥有这些权限的时候,那么他才可以来请求对应的这个接口。