restful 接口是如何设计的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Ouyangan
V2EX    Java

restful 接口是如何设计的

  •  
  •   Ouyangan 2015-06-03 11:52:13 +08:00 5848 次点击
    这是一个创建于 3857 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚上班没多久,经理让我写restful风格的接口文档,希望有朋友给一些建议.

    20 条回复    2015-07-01 12:32:47 +08:00
    babyname
        1
    babyname  
       2015-06-03 11:53:15 +08:00
    先了解设计原则、规范,然后根据需求写吧。
    learnshare
        2
    learnshare  
       2015-06-03 11:58:05 +08:00
    面向资源
    blue7wings
        3
    blue7wings  
       2015-06-03 12:11:22 +08:00 via iPhone   1
    http://www.ruanyifeng.com/blog/2011/09/restful.html
    阮一峰的这篇页面就写得挺好,可以参考下~~
    Septembers
        5
    Septembers  
       2015-06-03 12:23:10 +08:00 via Android
    设计文档之前先摸清楚业务
    Ouyangan
        6
    Ouyangan  
    OP
       2015-06-03 12:42:02 +08:00
    我的情况是:之前是自学的java,时间大概有六个月,接口文档没有写过,所以感觉到有一些无从下手,谢谢楼上的朋友的建议.
    invite
        7
    invite  
       2015-06-03 13:01:05 +08:00
    需求,需求。
    gevin
        8
    gevin  
       2015-06-03 13:03:58 +08:00   2
    我以前想在博客里写一下REST API设计原则的,看到下面这篇就懒得自己折腾了
    https://bourgeois.me/rest/
    colincat
        9
    colincat  
       2015-06-03 13:07:21 +08:00   1
    @Ouyangan springMVC 内置RESTful
    请参考 https://spring.io/guides/gs/rest-service/
    johnnyb
        10
    johnnyb  
       2015-06-03 14:28:26 +08:00
    举个例子:

    ```
    http://~/users 用户列表
    http://~/users/{id} 用户详情/编辑
    http://~/users/new 新用户(news视为{id}的特殊形式)
    http://~/users/{id}/roles 用户权限列表(二级资源,可以继续套用RESTfull)
    ```

    url 中不应该出现动词,对于同一个 url 例如 http://~/users/{id},通过 method (get/post/patch/put) 来区分是读/写操作
    zonghua
        11
    zonghua  
       2015-06-03 15:06:45 +08:00 via iPhone
    @johnnyb 受教了,springMVC直接提供了通过目录获取参数,不知道struts2如何实现?
    anyforever
        12
    anyforever  
       2015-06-03 16:12:45 +08:00
    大家API后端一般都是用什么语言开发的?
    johnnyb
        13
    johnnyb  
       2015-06-03 16:30:25 +08:00
    sing1ee
        14
    sing1ee  
       2015-06-03 16:54:56 +08:00
    面向资源在实践中,只能说看上去很简单,看上去很美。但,现实很残酷,很现实。业务总是会变的越来越复杂,这个过程中,面向资源的接口会越来越混乱,逻辑不清晰,交叉比较厉害。所以,聊一聊就可以了,不用太认真。
    我们使用的SpringBoot
    nullcc
        15
    nullcc  
       2015-06-03 17:04:41 +08:00
    阮一峰有一篇博文《RESTful API 设计指南》写得比较浅显易懂: http://www.ruanyifeng.com/blog/2014/05/restful_api.html
    Feiox
        16
    Feiox  
       2015-06-03 17:11:55 +08:00
    如果写 RESTful 文档,可以尝试一下 REST 建模语言: http://raml.org/
    minotaur
        17
    minotaur  
       2015-06-04 09:33:16 +08:00
    不要出现动词,使用get post put delete,浏览器兼容是个问题
    qianlifeng
        18
    qianlifeng  
       2015-06-30 14:53:28 +08:00
    @johnnyb
    ```
    http://~/users 用户列表
    http://~/users/{id} 用户详情/编辑
    http://~/users/new 新用户(news视为{id}的特殊形式)
    http://~/users/{id}/roles 用户权限列表(二级资源,可以继续套用RESTfull)
    ```

    感觉应该是:
    ```
    http://~/users GET/用户列表 ,POST/新用户,PUT/更新
    ```
    一般不用下面这种形式创建吧?

    http://~/users/new 新用户(news视为{id}的特殊形式)
    johnnyb
        19
    johnnyb  
       2015-07-01 12:12:25 +08:00
    @qianlifeng
    你是对的。我这里确实没交代清楚,举的例子应该是描述如何在浏览器地址栏呈现,对应api路径其实只有 http://~/users 一个,然后通过method来判定:POST/新用户,PUT/更新,DELETE/删除。。。
    Ouyangan
        20
    Ouyangan  
    OP
       2015-07-01 12:32:47 +08:00
    @johnnyb @qianlifeng 谢谢大家...
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     959 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 22:19 PVG 06:19 LAX 14:19 JFK 17:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86