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

我们必须要知道的RESTful服务最佳实践

实际上在工作中对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服务器内部错误

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

    RESTful API的十个最佳实践1. 使用名词而不是动词 2. Get方法和查询参数不应该改变资源状态3. 使用名词的复数形式 4. 为关系使用子资源 5. 使用HTTP头决定序列化格式 6. 使

    使用名词而不是动词 为了易于理解,为资源使用下面的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 – 不允许的,服务端正常解析和请求,但是调用被回绝或者不被允许

    3.2K50

    赏心悦目的RESTful API这样来设计!

    ,乍一看是一个挺抽象的概念,但其实,这个概念就像交通灯规则一样简单,就看如何看待相关规范....API 返回的数据格式,不应该是纯文本,而应该是一个 JSON 对象,因为这样才能返回标准的结构化数据。...找不到要删除的内容 使用状态码 202 有时候会比 使用状态啊吗 201 是更好的选择,状态码 202 的意思是:服务端已接收到了请求,但是还没有创建任何资源,但结果一切正常。...403Forbidden:用户通过了身份验证,但是不具有访问资源所需的权限 404NotFound:所请求的资源不存在,或不可用 415UnsupportedMediaType:客户端要求的返回格式不支持...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式 这里要注意状态码 401 和 403 的区别 5xx 状态码 5xx 状态码表示服务端错误,通常只会用到两个: 500InternalServerError

    1.9K10

    如何设计好的RESTful API

    ,乍一看是一个挺抽象的概念,但其实,这个概念就像交通灯规则一样简单,就看如何看待相关规范....API 返回的数据格式,不应该是纯文本,而应该是一个 JSON 对象,因为这样才能返回标准的结构化数据。...找不到要删除的内容 使用状态码 202 有时候会比 使用状态啊吗 201 是更好的选择,状态码 202 的意思是:服务端已接收到了请求,但是还没有创建任何资源,但结果一切正常。...403Forbidden:用户通过了身份验证,但是不具有访问资源所需的权限 404NotFound:所请求的资源不存在,或不可用 415UnsupportedMediaType:客户端要求的返回格式不支持...比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式 这里要注意状态码 401 和 403 的区别 5xx 状态码 5xx 状态码表示服务端错误,通常只会用到两个: 500InternalServerError

    2.2K20

    RESTful API 的设计与实现

    首先,我们拆开来看: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:服务器出错,比如数据库崩了状态码用得好,前端开发者看到错误码就能知道问题出在哪里,不用瞎猜。

    67700

    从100到511的这些数字,HTTP状态码背后的秘密你知道多少?

    当你看到页面正常加载时,这场对话顺畅愉快;当出现"无法访问"时,其实是服务器给你发了一封"出错通知书"——这就是HTTP响应状态码,互联网世界的"表情语言"。...五大类状态码如下:类别范围含义常见场景信息响应100-199请求已接收,继续处理大文件上传、协议切换成功响应200-299请求已成功处理页面正常加载、API调用成功重定向消息300-399需要进一步操作以完成请求网页搬家...二、成功响应(2xx):服务器的"OK"手势这是开发者最希望看到的状态码,代表一切正常。...204 No Content:成功但"无话可说"含义:请求成功处理,但没有返回内容最佳实践:DELETE操作成功后PUT更新资源但无需返回新内容 实用技巧:前端可以根据204状态码直接刷新列表,无需处理响应体...虽然是玩笑,但一些框架如Spring Boot仍支持这个状态码。451 Unavailable For Legal Reasons:"法律不允许"表示资源因法律原因无法访问,如政府审查。

    1.6K10

    33. Flask实现BasicAuth基础认证以及DigestAuth摘要认证

    需求 一般我们使用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

    2.3K20

    Kubernetes的client-go库介绍

    不同于 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

    4.5K31

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

    例如: 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格式,但严格来说,这样做不正确,所以需要处理一下。

    2.2K10

    RESTful规范Api最佳设计实践

    : 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的设计规范,并不是所有的接口都应该遵循这一套规范来设计,不过我们在设计初期更应该规范性,这样我们在后期阅读代码时根据路径以及请求方式就可以了解接口的主要完成的工作

    1.2K00

    10个有关RESTful 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

    89750

    什么是RESTful,REST api设计时应该遵守什么样的规则?

    比如用户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:请求过多,用于速率限制,应包含重试标头

    1.5K30
    领券