开发 API 开始都好好的,Laravel5.5 提供的 make:resource
用的也挺方便的,转换层不用下载其他包了。但是当我开发完几个 get、post 路由,再开发 patch 和 put 路由时发现在 postman 里面怎么测试都报错。
后来查了好多资料才发现
form-data 不支持 put 和 patch !!
然后我的postman一直是使用form-data来测试接口的
原来如此。。。
接下来就是找解决办法
解决方法一:
使用 postman 的 form-data 传过去是不行的,用 x-www-form-urlencoded 就可以了。
所以 ajax 传数据的时候不能直接传 form-data 数据,要传键值对序列化过去。
解决方法二:
不过还有一种解决办法,Laravel 提供了用 post 模拟 put 和 patch 的方法,就是你依然可以使用 post 请求 和用 form-data 传数据,但是你要在 form-data 里再加一行数据,其中 key 是 _method , value 是 PUT 或者 PATCH 。这样 Laravel 的 put 和 patch 路由依然会正确解析你的 post 请求。
解决方法三:
感谢 Laravel China 论坛回复里提出的直接用 Content-Type: application/json
这个 Headers
传数据, 我在 postman 里试了一下确实可以。而且查了一下资料,加这个 Headers
确实是一个比较通用且较好的方法,详情可以见 四种常见的 POST 提交数据方式
在 postman 里面测试接口的话就选择用 raw
传 application/json
格式就可以了
然后 postman 会自动把 Headers 改为 Content-Type:application/json
这样前端开发使用 patch 或者 put 路由的时候,只要把数据 JSON 序列化之后传过来就可以了。一般是使用 JSON.stringify
这个方法来进行序列化。