实际上在工作中对api接口规范、命名规则、返回值、授权验证等进行一定的约束,一般的项目api只要易测试、足够安全、风格一致可读性强、没有歧义调用方便我觉得已经足够了,接口是给开发人员看的,也不是给普通用户去调用...当然这总无状态性的约束也是有缺点的,客户端的每一次请求都必须带上相同重复的信息确定自己的身份和状态(这也是必须的),造成传输数据的冗余性,但这种确定对于性能和使用来说,几乎是忽略不计的。...4.一致的数据格式 服务端返回的数据格式要么是XML、要么是Json(获取数据),或者直接返回状态码,有兴趣的可以看看博客园的开放平台的操作数据的api,post、put、patch都是返回的一个状态码...api/users GET 获取所有用户信息 https://example.com/api/users/1 GET 获取标识为1用户信息 https://example.com/api/users...HTTP Method 详细解释 返回状态码 GET 获取对象或集合 200成功、401没有授权、403访问禁止、404没有资源、参数错误、406请求格式不正确、410资源被删除、500服务器内部错误
retrofit和chopper提供类似Retrofit的注解风格,适合习惯Android开发的团队,但生态和灵活性略逊于dio。...泛型支持:通过支持任意数据类型的返回,结合fromJson回调完成JSON到模型的转换。...它具有以下优势:结构统一:无论成功还是失败,返回值都符合同一结构,便于状态管理。类型安全:通过泛型T明确指定数据类型,避免类型转换错误。...返回统一结构,如{code:200,message:"ok",data:{}}。...ref.watch(usersProvider)监听状态变化,自动刷新UI。NetworkStateWidget统一处理加载、成功、错误状态。RefreshIndicator支持下拉刷新。
使用名词而不是动词 为了易于理解,为资源使用下面的API结构: Resource Getread Postcreate Putupdate Delete /cars 返回一个car的列表 创建一个新的car...Get方法和查询参数不应该改变资源状态 使用Put,Post和Delete方法替代Get方法来改变资源状态。不要使用Get来使状态改变: GET /users/711?...activate or GET /users/711/activate 3....使用HTTP状态码处理错误 忽略错误处理的API是很难使用的,简单的返回500和调用堆栈是非常不友好也非常无用的: 使用HTTP状态码 HTTP标准提供了70多个状态码来描述返回值,我们不需要完全用到他们...Request – 调用不合法,确切的错误应该在error payload中描述,例如:“JSON 不合法 ” 401 – 未认证,调用需要用户通过认证 403 – 不允许的,服务端正常解析和请求,但是调用被回绝或者不被允许
状态码都是三位的整数,大概分成了几个区间: 2XX:请求正常处理并返回3XX:重定向,请求的资源位置发生变化4XX:客户端发送的请求有错误5XX:服务器端错误 常见的状态码有以下几种: 200 OK -...如果状态码是4xx,就应该向用户返回出错信息。 良好的文档 文档应该是规范的API的重要的组成部分,没有文档的API是难以给他人使用的,也是不利于维护的。...swagger帮API使用者和开发者纠正了这个问题。 什么是swagger Swagger是一个简单但功能强大的API表达工具。...summary: Returns a list of users....summary: Returns a list of users
ResponseStarted 返回消息头发送完毕后记录,只针对 watch 之类的长连接请求。 ResponseComplete 返回消息全部发送完毕后记录。...- level: None users: ["system:kube-proxy"] verbs: ["watch"] resources: - group:...- level: Request verbs: ["get", "list", "watch"] resources: - group: "" # core...对于大量冗余的kube-proxy watch请求,kubelet和system:nodes对于节点的get请求,kube组件在kube-system下对于endpoint的操作,以及API Server...(.*)', 1)as "命令" ,"responseStatus.code" as "状态码", CASE WHEN "user.username" !
,乍一看是一个挺抽象的概念,但其实,这个概念就像交通灯规则一样简单,就看如何看待相关规范....API 返回的数据格式,不应该是纯文本,而应该是一个 JSON 对象,因为这样才能返回标准的结构化数据。...找不到要删除的内容 使用状态码 202 有时候会比 使用状态啊吗 201 是更好的选择,状态码 202 的意思是:服务端已接收到了请求,但是还没有创建任何资源,但结果一切正常。...403Forbidden:用户通过了身份验证,但是不具有访问资源所需的权限 404NotFound:所请求的资源不存在,或不可用 415UnsupportedMediaType:客户端要求的返回格式不支持...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式 这里要注意状态码 401 和 403 的区别 5xx 状态码 5xx 状态码表示服务端错误,通常只会用到两个: 500InternalServerError
首先,我们拆开来看:REST(Representational State Transfer),翻译成中文是“表述性状态转移”,但说实话,这个翻译挺绕口的,没啥直观的感觉。...返回合理的 HTTP 状态码API 调用成功或者失败,不应该只返回 200 OK,而应该使用合适的状态码:200 OK:请求成功,比如 GET /users201 Created:资源创建成功,比如 POST.../users204 No Content:删除成功但没有返回数据,比如 DELETE /users/1400 Bad Request:请求参数有误,比如 POST /users 但缺少 name 字段...401 Unauthorized:未授权,比如访问需要登录的接口但没带 Token403 Forbidden:没有权限,比如普通用户想访问管理员页面404 Not Found:资源不存在,比如访问 GET.../users/9999 但 ID 9999 的用户不存在500 Internal Server Error:服务器出错,比如数据库崩了状态码用得好,前端开发者看到错误码就能知道问题出在哪里,不用瞎猜。
简化了从数据库构建一个真实的后端 API,选择通过 Laravel 的 factory() 方法在 API 返回中模拟假数据。...就像这样;你应该有一个包含50个用户的数据库,我们可以通过api查询和返回。.../users', 'UsersController@index'); }); 控制很直接;返回一个带分页的Eloquent API : api/users 接口可以用在单页应用中,如果你继续学看下去,你会注意到新的返回已经不满足当前的组件。...npm run watch # Yarn yarn dev # Watch to update automatically while developing yarn watch 最后,这是我们更新完整的
当你看到页面正常加载时,这场对话顺畅愉快;当出现"无法访问"时,其实是服务器给你发了一封"出错通知书"——这就是HTTP响应状态码,互联网世界的"表情语言"。...五大类状态码如下:类别范围含义常见场景信息响应100-199请求已接收,继续处理大文件上传、协议切换成功响应200-299请求已成功处理页面正常加载、API调用成功重定向消息300-399需要进一步操作以完成请求网页搬家...二、成功响应(2xx):服务器的"OK"手势这是开发者最希望看到的状态码,代表一切正常。...204 No Content:成功但"无话可说"含义:请求成功处理,但没有返回内容最佳实践:DELETE操作成功后PUT更新资源但无需返回新内容 实用技巧:前端可以根据204状态码直接刷新列表,无需处理响应体...虽然是玩笑,但一些框架如Spring Boot仍支持这个状态码。451 Unavailable For Legal Reasons:"法律不允许"表示资源因法律原因无法访问,如政府审查。
需求 一般我们使用Flask进行前后端分离开发的时候,前端与后端直接就是通过 API 请求进行数据交互,那么我们可以如何去确认我们的服务是安全的呢?...如果是前后端不分离的单体应用中,用户登陆一般是通过填写页面表单,并且在页面配置 csrftoken 来保证该页面为服务页面,然后登陆成功之后,将用户的登陆状态保存在服务器的session中,然后session_id...在前后端分离的开发中,我们一般会基于 REST 的规则设计 API,而单纯的 HTTP 请求是无状态的,要求浏览器客户端在每一次请求都要提供认证的信息,那么怎么去便利地让 HTTP 提供认证呢?...% auth.current_user() # 自定义未认证通过的返回 @auth.error_handler def unauthorized(): # return make_response...% auth.username() # 自定义未认证通过的返回 @auth.error_handler def unauthorized(): # return make_response(jsonify
不同于 clientset,dynamic client 返回的对象是一个 map[string]interface{},如果一个 controller 中需要控制所有的 API,可以使用dynamic...交互,但是考虑一点就是交互的形式,Informer设计为List/Watch的方式。...Informer在初始化的时先通过List去从Kubernetes API中取出资源的全部object对象,并同时缓存,然后后面通过Watch的机制去监控资源,这样的话,通过Informer及其缓存,我们就可以直接和...对象资源的操作接口 默认的每一种资源对象都有一个interface,封装了对象的CURD方法和list/watch方法 如 Deployment(/文件路径Users/meitu/Documents/work_Meitu...image.png client-go组件 Reflector:通过Kubernetes API监控Kubernetes的资源类型 采用List、Watch机制 可以Watch任何资源包括CRD 添加object
当权限检查失败时,将根据以下规则返回“403 Forbidden”或“401 Unauthorized”响应: 请求已成功验证,但权限被拒绝。— 将返回 HTTP 403 Forbidden 响应。...— 将返回 HTTP 403 Forbidden 响应。 请求的身份验证没有成功,并且最高优先级的身份验证类确实使用了WWW-Authenticate头。...如果你使用一个常规的APIView,你需要自己调用分页API来确保你返回一个分页的响应。.../crud 请求方式:GET 请求地址:http://localhost:2800/api/demo/list?.../users/ PATCH请求(局部更新):http://127.0.0.1:8000/users/1/ DELETE请求:http://127.0.0.1:8000/users/2/
例如: api/getusers 就是不正确的. GET api/users 就是正确的 GET api/users/{userId}. 所以资源应该使用的是名词....如果是非分层结构的资源, 那么它不应该这样命名: api/xxx/xxx/users, 而应该使用 api/users....如果是单个资源, 不应该这样 api/id/users, 而应该是 api/users/{userId}. (资源名是否复数还是根据个人习惯吧)....,表示API的消费者发送到服务器的请求是错误的 401 - Unauthorized,表示没有权限 403 - Forbidden,表示用户验证成功,但是该用户仍然无法访问该资源 404 - Not found...它们返回的都是json格式的。 因为服务器(项目)现在不支持xml,所以返回了默认的json格式,但严格来说,这样做不正确,所以需要处理一下。
现代前端框架虽然已经做了很多底层优化,但开发者仍然可以通过合理的编码方式来进一步提升渲染性能。不同框架有各自的优化策略和最佳实践。.../users/${userId}?...watch(showDetailInfo, async (show) => { if (show && !...小结Vue和React的渲染性能优化其实没有什么神秘的技巧,关键是要理解框架的工作原理:React优化:合理使用memo、useMemo、useCallback,配合虚拟化技术处理大量数据条件渲染:频繁切换用...记住,过早的优化是万恶之源,但合理的优化能让用户体验上一个台阶。
: v2' https://api.yuqiyu.com/users/1 这两个版本的请求可能请求参数、返回值都不一样,但是请求的路径是一样的。...201 新资源创建成功 204 没有任何内容返回 400 传递的参数格式不正确 401 没有权限访问 403 资源受保护 404 访问的路径不正确 405 访问方式不正确,GET请求使用POST方式访问...https://api.yuqiyu.com/v1/users -d '{ "name": "", "age": 25, "address": "山东济南" }' # 响应状态...HttpStatus 200 # 响应内容 { "code": "400", "message": "用户名必填." } 在服务端我们可以控制不同状态码、不同异常的固定返回格式,不应该将所有的异常请求都返回...timestamp 请求响应的时间戳 总结 RESTful是API的设计规范,并不是所有的接口都应该遵循这一套规范来设计,不过我们在设计初期更应该规范性,这样我们在后期阅读代码时根据路径以及请求方式就可以了解接口的主要完成的工作
理想情况下,该组件将使用一个端点并将其结果作为范围限定的插槽属性返回: api/users" v-slot ="{data}"> 现在,尽管此API的基本目的是通过网络获取一些数据并显示它们,但仍有许多丢失的东西很有用。 让我们从错误处理开始。...但是加载状态呢?...您仍然必须实施实际代码,以使其正常工作。...您可以在这里找到它的工作示例。 但是,此HOC组件与Vue 2中的组件相似。您只能使用composition API重新编写它,尽管它很简洁,但几乎没有用。
使用PUT, POST 和DELETE 方法 而不是 GET 方法来改变状态,不要使用GET 进行状态改变: GET /users/711?...activate GET /users/711/activate 3.使用复数名词 不要混淆名词单数和复数,为了保持简单,只对所有资源使用复数。.../cars 而不是 /car /users 而不是 /user /products 而不是 /product /settings 而部署 /setting 4....使用Http状态码处理错误 如果你的API没有错误处理是很难的,只是返回500和出错堆栈不一定有用 Http状态码提供70个出错,我们只要使用10个左右: 200 – OK – 一切正常 201 – OK...Not Modified – 客户端使用缓存数据 400 – Bad Request – 请求无效,需要附加细节解释如 "JSON无效" 401 – Unauthorized – 请求需要用户验证 403
比如用户id为1的用户开始工作:https://www.wljslmz.cn/v1/users/1/start-work7、URL最好不用大写使用大写字母定义资源会使 URL 键敏感,在特定情况下可能会导致混淆...,使用小写字母将确保命令的正确性,即使 URL 是用大写字母输入的,但反之则不然:比如上面第6个url最好不要写成:https://www.wljslmz.cn/v1/users/1/Start-Sork...但是假如api是https://www.wljslmz.cn/v1/users/1/start-work,那么你在浏览器中必须是大写形式。...一些常见的 HTTP 状态代码包括:200:成功的请求,通常是 GET201:创建后请求成功,通常是 POST204:请求成功,没有返回内容,通常是 PUT 或 PATCH301:永久重定向到另一个端点...400:错误请求(客户端应修改请求)401:未经授权,凭据无法识别403:禁止,凭据接受但没有权限404:未找到,资源不存在410:消失了,资源以前存在但现在不存在429:请求过多,用于速率限制,应包含重试标头