Restful http API的小疑问
发布于 9 年前 作者 fangker 5326 次浏览 最后一次编辑是 8 年前 来自 问答

//提交用户信息 POST 方法 API: http://localhost:3000/api/usercus/{username} 那么,问题来了,如张三: http://localhost:3000/api/usercus/zhangsan 那我在提交的时候json里是否含有用户名这个参数。因为URL已经含有{username}字段了。 另外restful有什么好处。完全可以全部提交到http://localhost:3000这里通过参数判断

16 回复

Restful最基本的原则是:url表示资源,METHOD表示动作。另外通过accesstoken来验证用户的身份。遵守restful约定之后,任何开发者都能快速理解API的结构和意图。 http://localhost:3000/api/usercus/zhangsan 这个链接应该代表的是zhangsan的信息表,通过json提交要修改的用户信息,再用accesstoken验证用户权限。 restful 只是一种约定,就像写代码一样有个代码规范,这样大家都能看懂。 把全部请求提交到http://localhost:3000理论上是可行的,问题是这样的API理解起来费劲,用起来也费劲,恐怕这样的API也只有作者会用

那我在提交的时候json里是否含有用户名这个参数。因为URL已经含有{username}字段了。 如果是创建资源,个人认为就是url里不必带{username},body里存储所有信息。

@binking338 那如果是获取资源呢?明明已经知道

@jingsam 谢谢你的回答,解决了我的疑问。还有个问题,比如我需要3个参数,这时候提交了2个参数,我还需要返回错误提示么?关于参数个数不正确

rest跟什么鉴权什么token屁关系都没有!!!

        StatusContinue           = 100
        StatusSwitchingProtocols = 101

        StatusOK                   = 200
        StatusCreated              = 201
        StatusAccepted             = 202
        StatusNonAuthoritativeInfo = 203
        StatusNoContent            = 204
        StatusResetContent         = 205
        StatusPartialContent       = 206

        StatusMultipleChoices   = 300
        StatusMovedPermanently  = 301
        StatusFound             = 302
        StatusSeeOther          = 303
        StatusNotModified       = 304
        StatusUseProxy          = 305
        StatusTemporaryRedirect = 307

        StatusBadRequest                   = 400
        StatusUnauthorized                 = 401
        StatusPaymentRequired              = 402
        StatusForbidden                    = 403
        StatusNotFound                     = 404
        StatusMethodNotAllowed             = 405
        StatusNotAcceptable                = 406
        StatusProxyAuthRequired            = 407
        StatusRequestTimeout               = 408
        StatusConflict                     = 409
        StatusGone                         = 410
        StatusLengthRequired               = 411
        StatusPreconditionFailed           = 412
        StatusRequestEntityTooLarge        = 413
        StatusRequestURITooLong            = 414
        StatusUnsupportedMediaType         = 415
        StatusRequestedRangeNotSatisfiable = 416
        StatusExpectationFailed            = 417
        StatusTeapot                       = 418
        StatusPreconditionRequired         = 428
        StatusTooManyRequests              = 429
        StatusRequestHeaderFieldsTooLarge  = 431
        StatusUnavailableForLegalReasons   = 451

        StatusInternalServerError           = 500
        StatusNotImplemented                = 501
        StatusBadGateway                    = 502
        StatusServiceUnavailable            = 503
        StatusGatewayTimeout                = 504
        StatusHTTPVersionNotSupported       = 505
        StatusNetworkAuthenticationRequired = 511

@fangker res.sendStatus(400)

@captainblue2013 RestAPI确实与Token没关系,但是你的Rest API不鉴权吗?如果不用鉴权的话,说明API只设计给你自己调用,那还值得用API吗,直接函数调用不就得了!

@fangker get http://localhost:3000/api/usercus/ get http://localhost:3000/api/usercus/zhangsan 这两个语意不一样

还有http返回码 和 错误码提示不冲突 比如你写了个函数,如果你觉得这个调用是错误的。你想发出异常,还是返回错误码?这个取决于你自己(虽然这个可以值得深入讨论)

@jingsam accesstoken还可以放很多地方 比如Header里啊(cookies)

@binking338 第一个是获取所有用户?

@359056163 请问这个状态码当做http状态码返回还是当做json里返回?

@jingsam 谢谢您的指导,因为是菜逼,我直接在第一次请求的时候redis创建一个key下次请求带用户名key验证。

回到顶部