规范化-RESTful URL

2024-04-29 19:12
文章标签 url 规范化 restful

本文主要是介绍规范化-RESTful URL,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

有些项目的 URI 是 Restful 风格,但是项目本身并不是 RESTful项目,即,返回的仍是 html 格式字符串,而非 json格式字符串。
在这里,我们只谈论 URL 的风格规范,而不强求是否是『真·RESTful』项目。

1. 以资源为中心的 URL 设计

『资源』是 Restful API 的核心元素,所有的操作都是针对特定资源进行的。
1. 资源分为单个文档和集合,尽量使用『复数』 来表示资源,单个资源通过『嵌入』id 来表示。例如:

  • /students
  • /students/9527

2. URL 中『只能』嵌入 id,不能嵌入其它条件。例如:

  • /students/9527

3. 资源可以『嵌套』,通过类似目录路径的方式来表示,以体现它们之间的关系

  • /students/9527/teachers
  • /teachers/10086/courses

4. 一个资源可以有多个不同的 URL,即,多个不同的 URL 可能、可以指向同一个资源,也就是说,一个资源可以有多种 URL 表现形式。例如:

  • /students/9527/dormitory
  • /dormitory/3306

5. 理论上,URL 应该是大小写敏感的。所以为了避免歧义,尽量使用『小写』字母。
6. 命名中出现多个单词的,尽量使用『串型命名法』。例如:

  • /index-page
  • /login-page

2. CRUD 操作请求

2.1 严格情况
请求方式描述
GET获取资源
POST创建资源
PUT更新资源
DELETE删除资源

例如:

# 增
PUT /students/9527
# 删
DELETE /students/9527
# 改
POST /students
# 查
GET /students
GET /teachers/10086/courses

URL 中不要出现动词。反例:

/getAllCars
/createNewCar
/deleteAllRedCars

理论上 URL 中 不应该 出现动词。

2.2 非严格情况
请求方式描述
GET获取次资源
POST创建、更新、删除资源

这种情况下,如何在 POST 请求的 URL 中描述当前操作是增删改中的哪一种就是一个问题。

2.3 特殊情况

有时候 (包括上章的非严格情况) 想要执行的操作、行为,无法完美匹配『增删改』这三个字,需要使用别的动词来描述所操作的行为。此时,怎么办?
方案有多种,这里我们采用如下这种:
在特殊情况下,允许违背 RESTful 的 URL 严格要求,允许在 URL 中出现动词,但是只允许在 URL 的『最末端』出现动词。例如:

# 发布一篇文章
POST /articles/9527/publish
# 重新发送邮件
POST /mails/9527/resend

3. 分页查询及返回

  • 分页请求参数

当要进行分页查询时,在请求原有 API 的基础上,可额外附带如下 (或类似参数) 两个参数:

参数含义
page_number 表示请求第几页
page_size表示每页最多显示多少条记录

你也可以将普通查询和分页查询统一起来。即,认为所有的查询都认为是分页查询,在客户端没有提供这两个参数时,认为它俩是默认值,例如  (1, 10) 。

  • 分页返回

返回资源集合时,包含于分页有关的数据。例如:

{...,"page_number": 1,   # 当前是第几页"page_size": 10,    # 每页多少数据"pages": 3,      # 总共多少页"has_next": true,   # 是否有下一页数据"has_prev": false,   # 是否有前一页数据"total": 27,      # 总共多少数据"data": [       # 查询结果{ ... },{ ... },{ ... }
]
}
  • 排序参数

如果需要后端排序,那么约定前端请求时,发送类似如下参数:

参数含义
sortby进行排序的列名、属性名。
order升序 (asc) ,或降序 (desc)

指定返回结果按照哪个属性排序,以及排序顺序。

4. RESTful 请求返回的状态码

RESTful 返回状态吗有两大『流派』:
重用 HTTP 响应状态码
自定义状态码
我们采用第二种 自定义状态码 。
1. 无条件返回 200 。这样前端开发人员就不用纠结应该走哪个返回码的判断逻辑。但这个 200 不代表请求一定就是成功的,这要接着看第二条。

{
...,
"page_number": 1, ??# 当前是第几页
"page_size": 10, ???# 每页多少数据
"pages": 3, ?????# 总共多少页
"has_next": true, ??# 是否有下一页数据
"has_prev": false, ??# 是否有前一页数据
"total": 27, ?????# 总共多少数据
"data": [ ??????# 查询结果
{ ... },
{ ... },
{ ... }
]
}


2. 返回的数据中,自带自定义的状态码 (和对应的状态信息) ,例如: { code: 9527, msg: 'xxxx', data: ...
} 。前端开发人员靠这里的 code 的值作为标准,判断请求是否成功,而非 HTTP 请求的那个 200 。

这篇关于规范化-RESTful URL的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/946923

相关文章

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa

Restful API 原理以及实现

先说说API 再说啥是RESRFUL API之前,咱先说说啥是API吧。API大家应该都知道吧,简称接口嘛。随着现在移动互联网的火爆,手机软件,也就是APP几乎快爆棚了。几乎任何一个网站或者应用都会出一款iOS或者Android APP,相比网页版的体验,APP确实各方面性能要好很多。 那么现在问题来了。比如QQ空间网站,如果我想获取一个用户发的说说列表。 QQ空间网站里面需要这个功能。

使用http-request 属性替代action绑定上传URL

在 Element UI 的 <el-upload> 组件中,如果你需要为上传的 HTTP 请求添加自定义的请求头(例如,为了通过身份验证或满足服务器端的特定要求),你不能直接在 <el-upload> 组件的属性中设置这些请求头。但是,你可以通过 http-request 属性来自定义上传的行为,包括设置请求头。 http-request 属性允许你完全控制上传的行为,包括如何构建请求、发送请

BERN2(生物医学领域)命名实体识别与命名规范化工具

BERN2: an advanced neural biomedical named entity recognition and normalization tool 《Bioinformatics》2022 1 摘要 NER和NEN:在生物医学自然语言处理中,NER和NEN是关键任务,它们使得从生物医学文献中自动提取实体(如疾病和药物)成为可能。 BERN2:BERN2是一个工具,

url参数中带有号,需要用先把url做个解析,使其方便在网络上传递

需求:提交异步通知地址给宝付的投标接口,发现投标成功后,异步通知地址没有被调用 排查:通过和宝付技术对接,发现是203,地址重定向错误。深入排查,发现异步通知返回的地址中&号之后的参数宝付没有收到 结论:表单提交的参数中的异步通知地址中的&号没有做urlencode()处理导致传递丢失参数。 地址参数中带有&号,java在做提交的时候,不能正确传递&,导致地址中&之后的内容丢失。故此需要ur

URL, URI 和 URN 之间的区别

英文原文:What's the difference between a URI and a URL?     URI 标识一个事物 , URL 定位一个事物;然而,位置同样可以标识一个事物,所以,每个 URL 都是一个 URI,但一个 URI 并不一定是一个 URL。   举例说明 罗杰·佩特   这是我的名字,这是一个标识。它就像一个 URI,但它不是一个 URL,因为,它不

Flask 创建app 时候传入的 static_folder 和 static_url_path参数理解

Flask 在创建app的时候 是用 app = Flask(__name__) 来创建的,不传入 static_folder参数的话 ,默认的静态文件的位置是在 static目录下 我们可以进入 Flask的源码里面查看 ctrl+鼠标左键进入 这是Flask的 __init__源码(后面还有一些,我就选了需要的代码)     def __init__(self,import_

jsapi 支付缺少appid ¬ify_url

$.ajax({url: 'url',type: 'get',dataType: "json",//改成jsonsuccess: function (data) {//$('#xx').val(data)WeixinJSBridge.invoke('getBrandWCPayRequest', $.parseJSON(data),function(res){if(res.err_msg == "

【python 爬虫】python中url链接编码处理方法

一、问题描述 有些网址,会把中文编码成gb2312格式,例如百度知道,美容这一词,网址上面会编码成: %C3%C0%C8%DD 那么如何生成这种编码呢? 二、解决方法 1、把要编码的文字encode成所需格式 2、利用urllib 库的quote方法编码 # -*- coding:utf-8*-import sysreload(sys)sys.setdefaultencodin

url、src、href定义以及使用区别

引用文章链接: http://zhidao.baidu.com/link?url=ermCA61VBeA2E2OQq0YHEDDJmjL3r9voEqQ7-zAEGzvZMp44QXTc7RnW4B21goDfDIi5A48FQ_Zndaw8V1ClAa https://segmentfault.com/a/1190000002877022 关于url、src、href首先给出一个非常好