php api设计_php面试系列之api接口的设计

### RESTful API的请求类型有哪些?

GET 从服务器取出资源

POST 在服务器新建一个资源

PUT 在服务器更新资源(客户端提供改变后的完整资源)

PATCH 在服务器更新资源(客户端提供改变的属性)

DELETE 从服务器删除资源

HEAD 获取资源的源数据

OPTION 获取信息 关于资源的那些属性是客户端可以改变的

接口的安全性

1. 选https协议代替http协议这样,避免明文传输数据

2. 对一些开放的接口做数字签名

3. 对有登录操作的接口,先通过登录获取访问的令牌,之后访问其他需要登录的接口

通过携带这个令牌进行访问。

登录认证机制中session和jwt对比

session的登录原理: 客户端(client) 提交 用户名 密码(或验证码)给服务端(server),服务端校验通过后,

服务端会生成身份认证相关的session数据,服务端将session数据保存在文件或者内存中,并且将session_id 返

回给客户端,客户端将返回的session_id保存在cookie中。此后客户端请求服务端时都会在cookie中携带session_id。

服务端通过校验session信息是否存在,如果存在判断用户是否处于登录状态以及用户具有的权限。通过校验就返回该有的

数据,没通过校验返回登录页。

session 的优势和劣势

优势: 1. session可以主动清除

2. session保存在服务端相对安全

3. 结合cookie使用 较为灵活 兼容性好

劣势: 1. cookie+ session 在跨域场景下表现不好

2. 如果是分布式部署,需要多机器共享session机制,实现方法可将session存储到数据库或者redis

中,这样查询session信息时需要进行数据库的操作

3. 基于cookie的机制很容易被CSRF攻击

jwt 的登录原理: 客户端(client) 提交 用户名 密码(或验证码)给服务端(server),服务端校验通过后,将用户的

id 和其它信息做为JWT playload(负载),将其与头部分别进行Base64编码拼接后签名,形成一个JWT,形成的JWT就是

形同,lll.zzz.xxx的字符串。后端将JWT字符串作为登录成功的返回结果,返回给前端。前端可以将返回结果保存在localStorge

或sessionStorage上,退出登录前删除保存的JWT即可。前端在每次请求时将JWT放在http header中的Authorization位

(解决XSS和XSRF攻击)。后端检查是否存在,如果存在验证JWT的有效性。例如检查签名是否正确,检查token是否过期

检查token的接受方是否是自己(可选)验证通过后,后端使用JWT中包含的用户信息进行其他的逻辑操作,返回相应的结果。

jwt 和 session的区别

session 的状态是存储在服务端的,客户端只存储session_id ,而token的状态存储在客户端

(因为信息全部放在客户端所以需要密码学的方法进行签名和加密)

分布式系统中session 共享是一个问题,session存在服务端,随着用户数量增多,会大幅降低服务端的性能

在多个域名下,会存在跨域问题,安全性方面cookie保存在本地,容易被人利用进行CSRF攻击

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值