几种API URL约定/规范

目的

开发了几个项目用了几种 API URL约定/规范。
没有好坏,顺手即可,写这个鬼,有时候有更好的方便自己对比一下。

一,方法型

其中 GET POST
或用新得 GET POST PUT DELETE 因人而异, 能用新的当然自我感觉好点

GET /article/findById 详情 ?id=1
/article/add 添加 {id:'',title:'xxxx'}
/article/list 查询 ?keyword=xxx&size=0&page=1 | title=%xxxx%&size=x&page=1 查询也能用自己公司习惯技术来衍生.
/article/edit 编辑 {id:'1',title:'bbbb'}
/article/delete 删除 [1,2,3]
/article/createByChatGpt 通过CPT创建一个文章

二,资源型/目录型一

把url当成文件来处理
这种resetful 风格基本都是 查询GET, 编辑PUT, 创建 POST,删除 DELETE
/articles/:id 详情
/articles 列表
/articles 添加 POST {id:'',title:'xxxx'}
/articles 添加 PUT {id:'1',title:'xxxx'}
/articles 删除 DELETE [1,2,3]}
/articles/:id/products 文章下面商品列表
/articles/1/products 添加 POST {id:'',goodName:'xxxx'}
/articles/1/products 修改 PUT {id:'1',goodName:'xxxx'}

如果商品下面还有,也就是有三级
/articles/:id/products/:goodsId/items
第三方调用变得有点恶心,需要在URL放入articleId 和 goodsId。用起来不舒服

Resetful风格描述非 CURD
/articles/:id/like 喜欢 POST
/articles/:id/like 取消喜欢 DELETE

/articles/add/chatgpt 通过Chatgpt 创建文章 POST {'senetance: 'xxxx'}

另外一个扩展导致我烧了CPU。例如
/articles/:id/bundles 不合理,因为bundles先于articles,
退其次 使用
bundles/:id/articles 使用中间表这周缝合 bundleArticles (类似 linux 文件管理 映射的概念)
把bundle设计成 ariticle 上级当然没问题,但是如果还有其他资源也需要有自己的集合那么就GG

当然新的业务约定是,一个功能越能兼容多的功能是更好的 满足 control v c
也就是bundles 能集合文章或产品等 。。

二,资源型/目录型二

对比起一型, 去除了URL上面 ID们, 让我们操作多级对象时 不需要去改URL,
一级对象还是遵循Resetful风格, 二级及以上去除了复数描述,也能解决articles 需要扩展bundle时可以直接放在article 目录下

/article/articles/:id 详情
/article/articles 列表
/article/articles 添加 POST {id:'',title:'xxxx'}
/article/articles 添加 PUT {id:'1',title:'xxxx'}
/article/articles 删除 DELETE [1,2,3]}
/article/products 文章下面商品列表 GET
/article/products/:id 商品详情 GET
/article/products 添加 POST {id:'',aritcleId:'1',goodName:'xxxx'}
/article/products 修改 PUT {id:'1',aritcleId:'1',goodName:'xxxx'}

/article/bundles
/article/bundles/:id
/article/bundle/articles ? bundleId=1&title=%xx%

关于API 版本

有人喜欢用 /v1/article** 这种感觉轻一点
有人喜欢在 head 里面加入version:v1 这种来进行描述,

关于业务级别/权限

基础接口使用 resources 进行管理员权限控制

动作型
/login
/login/wechat/mp
/login/weibo

/search 全局搜索

用户个人前缀
/home/**
/home/articles 我的文章
/home/notifications 我的通知

监听/第三方

/listener/wechats/:id/pay 支付事件
/listener/wechats/:id/click 点击事件

/listener/orders/status/change 状态更改

开放级别
/open/**
/open/aritcles/hots 热门文章 (也是使用 linux 映射的概念)
/open/aritcles/hots/weekly 热门文章 (也是使用 linux 映射的概念)

带权限开放接口
参考 http authorization type

URL 还没找到好的约定前缀

MVVM

如果mvvm与后台restful 同步就可以避免 url post item的时候需要手工去组装 文章id 到url里面
POST /home/articles/文章id/item

总结

还有些地方没考虑全

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容