lhbc
V2EX  ›  API

Restful API 里,应该怎么处理最后的 /

  •  
  •   lhbc · Feb 22, 2016 via Android · 4463 views
    This topic created in 3911 days ago, the information mentioned may be changed or developed.

    按规范,比如请求用户列表,应该是
    /api/users
    那对于 /api/users/ 这种请求应该直接 404 还是等同 /api/users 处理?

    20 replies  •  2016-02-23 10:29:56 +08:00
    v1024
    v1024
    Feb 22, 2016
    1
    标准的话,应该不处理结尾的 / ,因为 / 代表目录,隐含意思是 /index.htm 。
    dacapoday
    dacapoday
    Feb 22, 2016
    3
    直接返回一套字符串 显示 接口的说明,格式,使用方法?
    或者该 API 的运行状态?
    dacapoday
    dacapoday
    Feb 22, 2016
    4
    错了错了,我以为是根目录,无视上条
    learnshare
    learnshare
    Feb 22, 2016
    5
    #1 的观点是对的,加了 / 代表这个目录,默认是 /index.html
    timonwong
    timonwong
    Feb 22, 2016
    6
    对于 1 楼的观点,也有另外一种解释
    因为请求列表是一个 LIST 行为,对于 LIST 行为,应该按照目录处理,所以就应该是
    GET /api/users/
    lhbc
    lhbc
    OP
    Feb 22, 2016
    7
    @v1024
    @learnshare
    @timonwong
    GET /api/users/ 这个操作应该没问题
    不过对 /api/users/ 进行 POST(添加用户) 好像有点怪怪的

    Restful 里好像没定义目录的概念,所有想弄清楚规范里是建议怎么处理的
    搜索 restful directory, restful "last splash" 都没找到相关内容


    @Jafee
    这篇文章是对应浏览器和蜘蛛
    Restful 应该不太一样
    dorentus
    dorentus
    Feb 22, 2016
    8
    实在不知道的话就参考别人的实现么,例如 github 的:
    https://api.github.com/user 是可用的
    https://api.github.com/user/ 则返回 404
    lhbc
    lhbc
    OP
    Feb 22, 2016
    9
    @dorentus 忘记了去参考一些大站的实现
    thanks all.
    mcfog
    mcfog
    Feb 22, 2016
    10
    @lhbc 因为 splash 是飞溅, slash 才是斜杠

    另外,一般说 trailing slash
    learnshare
    learnshare
    Feb 22, 2016
    11
    @lhbc RESTful 也是基于 HTTP ,参考 HTTP 协议的实现就好了
    carlding
    carlding
    Feb 22, 2016
    12
    在 chrome 输入 www.baidu.com ,等进入网页后你把 url 复制粘贴到文本会发现自动多加了一个'/',所以还是等同处理吧。
    这个'/'有无大部分人应该都会忽略吧。
    毕竟不能将'/'后面认为是一个空字符串吧。
    qq529633582
    qq529633582
    Feb 22, 2016 via iPhone
    13
    @carlding 这个只有根目录才会的
    aprikyblue
    aprikyblue
    Feb 22, 2016
    14
    @carlding
    只有根目录+1 ,
    根目录是 /,为空就不太科学了吧。。

    以前看某些文章貌似说一些 http server 会把 http[s]://host 给 301 到 http[s]://host/ (当然前提是 client 发出了这种请求),没验证过


    另外对 LZ 问题,我赞同 6L
    jybox
    jybox
    Feb 22, 2016
    15
    我想提一种情况,比如有两个 API : DELETE /users 和 DELETE /users/:name ,分别是删除所有用户和删除指定用户。如果在调用后者时忘记加 name ,就变成了 DELETE /users/,我觉得最好还是不要当作前者,而是直接报错好一些。
    owlsec
    owlsec
    Feb 22, 2016
    16
    @jybox 心疼 leancloud
    lhbc
    lhbc
    OP
    Feb 22, 2016
    17
    @jybox
    @owlsec
    这个……真有真实案例?
    julyclyde
    julyclyde
    Feb 22, 2016 via iPad
    18
    @aprikyblue 发不出这种请求。你看看 http 请求行的格式
    aprikyblue
    aprikyblue
    Feb 22, 2016
    19
    @julyclyde 我也想到了 http 请求的格式,所以才说“为空就不太科学了”
    刚才去试了试,百度神马也没返回,必应返回了 400 Bad Request
    是我道听途说了
    dalang
    dalang
    Feb 23, 2016
    20
    我自己写得 rest api , /api/users/ 这种请求是直接 404 处理。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1668 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 11:10 · PVG 19:10 · LAX 03:10 · JFK 06:10
    ♥ Do have faith in what you're doing.