如何在Laravel中调用HTTP DELETE方法通过Zotero API删除在线文库条目
实现Zotero条目本地保存后同步删除线上条目的调整方案
1. 先纠正接口认知错误
你之前查阅的/keys/<key>接口是删除API访问密钥的接口,并非删除文库条目的接口。Zotero删除单个文库条目的正确请求规则为:
- 请求方法:DELETE
- 接口路径:
https://api.zotero.org/users/<你的用户ID>/items/<条目对应的key>
2. 调整视图代码,传递当前条目标识
你现在每个表单对应一条Zotero条目,需要在表单中新增隐藏域,把当前条目的key随表单一起提交到后端,修改后的表单代码补充如下:
<form action="/reference/autoCreate" method="post"> @csrf <div> <!-- 新增隐藏域传递当前条目key --> <input type="hidden" name="zotero_item_key" value="{{$data->data->key}}"> <!-- 原有title等其他字段代码保持不变 --> @if (property_exists($data->data,'title')) <p>Titre: {{$data->data->title}}</p> <input type="hidden" name="title" value="{{$data->data->title}}" > @else <p>Titre not found</p> <input type="hidden" name="title" value="title unfound" > @endif <!-- 其余原有字段代码保持不变 --> <button type="submit" name='Ajouter' value="Ajouter" class="btn btn-success pl-5 pr-5">Ajouter</button> </div> </form>
3. 调整store方法逻辑,添加删除请求
你之前store方法里重复拉取全量Zotero条目、删除第一条的逻辑完全错误,不需要额外拉取数据,直接用表单传递过来的条目key调用删除接口即可,修改后的store代码如下:
public function store(Request $request) { // 保存到本地数据库的逻辑保持不变 $reference_auto = new Reference; $reference_auto->user_id = Auth::user()->id; $reference_auto->title = $request->title; $reference_auto->authors = $request->authors; $reference_auto->year = $request->year; $reference_auto->edition = $request->edition; $reference_auto->url = $request->url; $reference_auto->save(); // 本地保存成功后,调用Zotero接口删除对应线上条目 $deleteResponse = Http::withToken('你的Zotero API密钥')->delete( 'https://api.zotero.org/users/你的用户ID/items/'.$request->zotero_item_key ); // 可加调试逻辑判断是否删除成功,比如判断$deleteResponse->status() == 204即为删除成功 $message = "Nouvelle référence ajoutée avec succès."; Alert::success('Ok !', $message); return redirect()->back(); }
原有代码失效原因说明
- 接口地址错误:你之前构造的删除地址多了
/keys层级,不符合条目删除接口规则 - 逻辑匹配错误:每次都删除全量条目列表的第一条,和当前提交的条目没有对应关系
- 接口功能理解错误:误把删除API密钥的文档当成了删除文库条目的文档
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

