1
kindjeff 2017-10-18 22:14:18 +08:00
登陆要啥 restful
|
2
matsuijurina 2017-10-18 22:14:59 +08:00 via iPad
并不是替换的关系,还是 mvc,只是 v 这一层只需要输出 json 了。restful api 具体怎么写参考新浪微博的 api 文档,那个很全面。
|
4
qiukun 2017-10-18 22:37:08 +08:00
对 session 资源的 new create delete
|
5
leeg810312 2017-10-18 22:42:53 +08:00 1
按 restful 风格,登录是创建 session,所以是 post /session,提交数据 username 和 password,返回 Token,注册是创建 user,所以是 post /user
|
6
mune OP @leeg810312 您能示范一下 登陆的 url 大概是怎样的吗,
|
7
timothyye 2017-10-18 22:49:01 +08:00 via Android
建议登录最好是 post,不要用 get,并且最好不要把用户名和密码放在 url 里面
|
8
yxzhm 2017-10-18 22:50:53 +08:00
@mune 用户名和密码不会出现在浏览器 URL 里,可以是前端框架去调用后面的一个 URL.可以参考下面这个源代码中的 Login 方法
https://github.com/CG542/WebDP/blob/master/dist/js/app.js |
9
newghost 2017-10-18 23:30:32 +08:00
|
10
zapper 2017-10-18 23:37:53 +08:00
类似于 oauth 那样吧,post 用户名密码得到 token,以 token 作为登录凭证
|
11
seeker 2017-10-18 23:49:24 +08:00 4
恕我直言,这只是形式上的 restful
不是吧 username=xxx&pwd=yyy 改成 username/xxx/pwd/yyy 就是 restful 的 |
12
k9982874 2017-10-19 00:04:24 +08:00
先抽象出登录时使用的资源:session
然后按照 restful 语义对 session 进行操作 登录 POST /api/user/session 登出 DELETE /api/user/session 刷新 session PUT /api/user/session |
14
hicair 2017-10-19 00:20:39 +08:00 2
登录密码直接写 url 里大丈夫??
|
16
Sapp 2017-10-19 02:21:03 +08:00 via Android
我至今都不是很明白 restful 除了换个请求方式,改一下链接形式以外和正常有啥区别,不都一样开发吗?
|
17
huntzhan 2017-10-19 03:33:10 +08:00
登录态基本不能用 REST 的思想来做。一般来说,REST 的 API 应该存在于完成 Authentication、拿到 token 之后(不考虑 read-only、非敏感部分的的 API )。
|
18
precisi0nux 2017-10-19 04:04:19 +08:00 via iPhone
@mlyy https 不能加密 URL 吧……
|
19
biggun 2017-10-19 04:52:30 +08:00
登录过程不适合用 restful,或者说和 restful 是两种不同的概念,restful (具象状态传输)是制定针对系统资源进行操作方法的一种风格。 @huntzhan 说的对啊,就是用登录过程获取一个 session (产生个 jwt 之类的东西),然后在此基础上利用 restful 风格的 api 对系统资源进行操作.
|
20
dangyuluo 2017-10-19 04:53:37 +08:00
不适合 Restful 的地方不要强上啊。。
|
21
dangyuluo 2017-10-19 04:54:07 +08:00
@precisi0nux https 当然可以加密 url,只是现代浏览器都会发送一个明文的 hosts
|
22
cljnnn 2017-10-19 05:33:07 +08:00 via Android 1
@precisi0nux 能加密,但是在 Nginx 日志中,这个 URL 是明文的,所以传密码还是用 post 吧。
|
23
lightening 2017-10-19 05:38:59 +08:00
@hheedat RESTful 的内涵思想是把所有操作抽象成对于一种对象( resource )的增删查改。
如登录、登出就是对于虚拟资源 session 的增加 /删除。 创建、删除用户是对于实体资源 user 的增加 /删除。 目前见到讲的最好的是 Rails 作者 DHH 的演讲: |
24
lightening 2017-10-19 05:39:37 +08:00
@mlyy 因为站在你后面的人会在地址栏看到你的密码?
|
25
darklowly 2017-10-19 05:47:01 +08:00
|
26
print1024 2017-10-19 07:33:04 +08:00 1
现在很多人在用 Facebook 的 GraphQL 来写 API,完善了很多 Restful 中的问题,你可以参考下[GraphQL 中文网]( http://graphql.cn/)
|
27
Phariel 2017-10-19 07:53:46 +08:00 via Android
oauth 2.0
|
28
laogui 2017-10-19 08:10:18 +08:00 via Android
都 restful 了就不要用 session 了,用 OAuth2.0 或者 jwt 做认证吧。
|
29
nl101531 2017-10-19 08:25:12 +08:00 via Android
这密码都放到链接中啊,肯定不行,就 post 请求 login,密码放到 body 中。
|
30
justfindu 2017-10-19 08:36:55 +08:00
restful 也就是给你一个语义规范 该 post 就 post 该 get 就 get 用户认证#28 楼 其他就是 V 层不返回模板返回数据就可以了. 除了用户认证需要修改 其他都无需动吧 如果是比较标准的 mvc 的情况
|
31
zjsxwc 2017-10-19 08:45:24 +08:00
MVC 里的 V 从 html 变成 json, 没有本质变化
原来的 session 变成 token, 其实仍旧没有本质变化 |
32
googlebot 2017-10-19 08:48:25 +08:00 via iPad
rest 是扩展 http,http 只有 get,post,rest 实现 delete,update,
rest 的好处,uri 很少更改,数据和界面更加分离, |
33
yulitian888 2017-10-19 08:55:45 +08:00
restful 适合做无状态的业务,登录真不合适
就这个例子而言,且不论 Post 和 Get 的区别,仅仅只是把 API 地址暴露给公网用户就已经属于非常危险的行为了。 一个黑客只需要知道登录的地址,经过简单的猜测(连猜都不需要吧?)就可以知道 Session 的增删改查(其他资源同理),这么做好吗? |
34
TimRChen 2017-10-19 09:16:16 +08:00
试试 JWT?
|
35
wizardoz 2017-10-19 09:37:24 +08:00
@googlebot HTTP 一直都有 GET POST PUT PATCH DELETE OPTION 等等功能码,但是以前的开发模式通常都只用 GET 和 POST。这其实算是一种滥用,用 GET 来实现 DELETE 功能码该做的事,感觉有点说不过去。REST 只是建议充分使用 HTTP 功能码的定义上的功能,GET 获取、POST 新增、PUT 和 PATCH 修改、DELETE 删除、OPTION 看资源支持哪些操作。
|
36
Kilerd 2017-10-19 09:52:37 +08:00
楼上那些说把用户名密码放在 URL 里面,而不是 post data 里面的,真的有用过 restful 来写过登陆功能吗?
|
38
TuringGunner 2017-10-19 10:42:54 +08:00 1
POST /api/session 这样写登录,然后把用户名密码放在 body 里
实际上就是创建一个 session 资源,返回一个 token 给客户端当作登录凭证 |
39
duan602728596 2017-10-19 10:50:45 +08:00 via iPhone
最后坑的还是前端,哎......
|
40
blacklee 2017-10-19 11:07:16 +08:00
1. MVC 和 RESTFul 两者是风马牛不相及的东西,不要混为一谈:
- 1.1 MVC 是代码构架上的一种设计模式,用户是看不到这东西的 - 1.2 RESTFul 是一种对资源的抽象,对用户而言最明显的就是 URL 风格的改变 2. 不管你是用什么七七八八的鬼框架鬼模式,只要涉及到敏感数据的传输,都应该是用 POST 把敏感数据放在 request body 里 |
41
mikulch 2017-10-19 11:20:50 +08:00
|
43
skadi 2017-10-19 11:29:22 +08:00
ls+1
|
44
prasanta 2017-10-19 11:29:30 +08:00 via iPhone
post /auth/token/
post /auth/session/ post /auth/oauth/ 哪里行么? |
45
solee 2017-10-19 11:30:59 +08:00
restful 就是一种 api 设计的理念,不过如何使用还是要结合你自己的业务。没有完美的标准,只有最适合的标准。
http://mp.weixin.qq.com/s/AhiyMnJ70TkOMnmkXG1Lsw 这篇文章讲得很有道理 我们的 api 设计也一直都是这么做的 |
48
siteshen 2017-10-19 13:16:06 +08:00
登录和其他不一样,不需要死搬硬套,给几个我一直在使用的 API 设计示例:
{ "meta:" {"success": true}, "data": {}, } 登录 POST /auth/login {"username": "", "password": ""} -> {"token": ""} 读取我的信息 GET /me/profile -> {"me": {}} 读取用户信息 GET /users/1024/profile -> {"user": {}} 关注用户 POST /users/1024/follow 用户关注列表 GET /users/1024/following-user -> {"users": []} |
49
ren2881971 2017-10-19 13:43:34 +08:00
LZ 想问的是 采用 restful 后 操作不了 session 咋控制登录访问权限吧。。
|
51
yzmm 2017-10-19 14:12:13 +08:00
然后黑客只需要拿到日志就能拿到用户账号密码了。。。
|
52
sheng9632 2017-10-19 14:29:07 +08:00
restful 只是一种规范 和用来些什么没关系 至于做登录当然可以
|
53
zysidea 2017-10-19 14:37:29 +08:00
别用 session 了,用 JWT 吧,用户登录的时候给用户返回一个 token,然后用户的每次请求头部都加上这个 token
|
54
sobigfish 2017-10-19 15:21:35 +08:00
没有文档就说改就改了,确定这技术总监不会搞坏你们现有的业务?-。-
|
55
irrigator 2017-10-19 15:32:11 +08:00
关于 Rest 最好的教程,楼主拿走不谢。[教狗狗用 Rest ]( https://www.slideshare.net/landlessness/teach-a-dog-to-rest)
|
57
jtn007 2017-10-19 16:44:49 +08:00
rest 风格的 url 同样允许 api.service.com/user/1 和 api.service.com/user?id=1 这样的冗余的,不要纠结,先好好理解 rest
|
58
asiufasd 2017-10-20 08:23:27 +08:00 via iPhone
其实我之前也遇到这个问题,查了好多资料,以及想了为什么要用 restful,restful 的好处就是以后可以更方便的分布和集群,所以需要无状态,如果还是用 session 管理的话,将来分布式之后 session 不方便管理。所以我觉得这里不应该用 session 来管理
|
59
lwyj123 2017-10-20 11:35:16 +08:00
我推荐楼主了解一下基于 token 的身份认证。
|