RESTful API之个人博客API设计(层级与非层级数据)

前言

近日在搭建个人博客后台。自然而然逃避不了设计api。选用RESTful API设计风格。
其实,一些实践已经有太多文章讲述了。这里仅对其中几点做个说明。

正文

首先大致说下api俩种方式传递的数据:层级数据(hierarchical data)和非层级数据(non-hierarchical data也就是标识资源)。
来个例子。比如获取某个用户的某篇文章:/api/v1/users/:owner_id/articles/:article_id?fields=title,content。这里的:owner、:article是层级数据,fields=title,content是标识资源。

疑问几点

层级数据多余

就像获取某个用户的某篇文章:/api/v1/users/:owner_id/articles/:article_id,这里的:article_id是唯一的,也就是可以直接定位到具体的那篇文章,为何需要:owner_id。其实这里把规范看的太死,/api/v1/articles/:article_id就行了,这里将articles当做独立得资源即可。

层级数据or非层级数据

比如根据文章名获取某个用户的某篇文章。他有俩种设计

  1. /api/v1/users/:owner_id/articles?article_name
  2. /api/v1/users/articles?article_name=xxx&user_id=xxx
    到底哪个好呢?个人觉得其实没有好坏之分。主要得看应用场景还有得设计的易懂,一目了然。
    前者把用户当做层级数据,后者认为用户与文章俩者没有很强的层级关系。
    值得注意的是,一般而言末端资源可以用非层级数据详尽描述。

Github REST API部分疑惑

  1. 获取你的仓库:GET /user/repos。注意这里user是单数,因为指代你自己一个人且不用指定你的用户名或者id像是/user/:your_id/repos。因为这在token里就可以了。
  2. 根据用户来获取其所有仓库:GET /users/:username/repos。与前者不同的是users是复数,因为指代所有用户。
  3. 根据用户来获取具体某个仓库:GET /repos/:owner/:repo。这点其实原本我是有疑虑的。因为没看见之前啊我是觉得应该是/users/:owner/repos/:repo。但是看见了github设计的想了下感觉它的更合理。因为本能的觉得repo依赖于user,所以设计成我那样子,其实repo是可以独立存在的。当然我这个也没错,但是如果层级深了,比如族谱,那就不合适了。当然这俩层不深,感觉看个人喜欢。还有的是这里的:owner是用户名,是唯一的,但是:repo不是,所以呢就需要指定下:owner。但是如果:repo是唯一的,:owner就明显没必要了。/repos/:repo就可以了。

博客API设计

模块 描述 url method
文章 获取你的文章 /user/articles GET
根据文章id获取你的文章 /user/articles/:id GET
获取你的topics文章 /user/articles/topics GET
创建文章 /user/articles POST
修改文章 /articles/:owner/:article PUT
删除文章 /articles/:owner/:article DELETE

PS:原本还想加上认证、标签、分类,想想还是不加了,感觉重复工作,索然无味。对了,如果根据标签获取文章,标签作为标志资源即可。

模块 描述 url method
根据用户获取文章 /api/v1/users/:owner/articles GET
根据用户以及文章id获取具体文章 /api/v1/users/:owner/articles/:id GET

因为上边个人博客,只是个人使用,所以不全,以下添加俩条

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

推荐阅读更多精彩内容