Django中未用DRF、带SessionID与X-CSRFToken认证的函数视图返回JSON是否符合RESTful规范?
问题解答
1. Django中返回JSON响应的基于函数的视图是否属于RESTful?
不一定。RESTful是一套架构设计风格,核心是遵循一系列约束原则(比如用HTTP方法对应资源操作、URI定位资源、无状态、统一接口等),和视图是函数式还是类式、返回格式是不是JSON没有直接关系。
- 如果你的函数视图严格遵循REST原则:比如用
GET请求查询资源、POST创建资源、PUT/PATCH更新资源、DELETE删除资源,通过清晰的URI定位单个/集合资源,每个请求包含所有必要信息(无状态),那它可以是RESTful的。 - 但如果只是随便写个函数视图返回JSON,却无视HTTP方法语义(比如用
GET做创建操作)、没有合理的资源URI设计,那显然不符合RESTful规范。
2. 未使用DRF,基于SessionID认证、POST携带X-CSRFToken且返回JSON的Django函数视图是否符合RESTful规范?
从严格的RESTful规范来说,不符合,核心原因是SessionID认证违反了REST的「无状态」约束:
- REST要求服务器不存储任何客户端会话状态,每个请求必须包含所有完成请求所需的认证信息(比如基于Token的认证,客户端每次请求携带独立的认证令牌)。而SessionID认证是服务器存储会话数据,客户端靠Cookie里的SessionID关联状态,属于有状态设计。
- X-CSRFToken是针对会话认证的安全防护手段,本身是和有状态会话绑定的,也不符合REST无状态的要求。
不过实际开发中很多项目会这么做(尤其是前后端同构的场景),这种实现能快速利用Django自带的会话和CSRF防护机制,但它不属于严格意义上的RESTful实现。如果要贴合RESTful规范,建议改用无状态的认证方式(比如JWT、API Key),同时去掉会话依赖。
内容的提问来源于stack exchange,提问作者beat_it_987
相关产品推荐
相关产品推荐

