如何在 Laravel 中使用 HTTP 请求的删除方法通过外部 Api 库删除项目
Posted
技术标签:
【中文标题】如何在 Laravel 中使用 HTTP 请求的删除方法通过外部 Api 库删除项目【英文标题】:How to use HTTP request's delete method in Laravel to delete item via external Api library 【发布时间】:2021-11-30 05:44:17 【问题描述】:基本上我使用 Zotero 的 API 从我的 (zotero) 库中获取项目并将它们保存在我的数据库中。
当我点击提交按钮时,数据被保存,但我想同时使用 http 请求的删除方法从在线 zotero 的库中删除它。
以下是 API 文档关于删除的说明:
URI:
/keys/<key>
给定 API 密钥的用户 ID 和权限。 使用 DELETE HTTP 方法删除密钥。这通常只能由最初使用 OAuth 创建密钥的客户端完成。
数据的Json结构如下:
structure
这是我的控制器:
public function index(Request $req)
$response = Http::withToken('MyApiKey')->get('https://api.zotero.org/users/myUserID/items?limit=100
');
$response->json();
$datas= json_decode($response);
return view('partials.ajout_automatique',compact('datas'));
我的看法:
@foreach ($datas as $data)
-- dd(property_exists($data->data,'title')) --
@if (property_exists($data->data,'title'))
<form action="/reference/autoCreate" method="post">
@csrf
<div>
-- 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
-- etc... --
<button type="submit" name='Ajouter' value="Ajouter"
class="btn btn-success pl-5 pr-5">Ajouter</button>
</form>
@endif
@endforeach
我的功能商店:
public function store(Request $request)
$response = Http::withToken('ItxwU6wG7bnNDY3E9bVfq3Da')->get('https://api.zotero.org/users/8548265/items?limit=100
');
$response->json();
$collections= json_decode($response);
$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;
$message = "Nouvelle référence ajoutée avec succès.";
$reference_auto->save();
Alert::success('Ok !', $message);
return redirect()->back();
我不知道应该如何以及在哪里使用Http::delete('http://example.com');
实现我需要做的事情。
例如删除第一项我在redirect()->back()之前在store函数中尝试这个
//delete from api lib
$key=$collections[0]->key;
Http::withToken('MyApiKey')->delete('https://api.zotero.org/users/MyUserID/items/keys/'.$key);
但它不起作用
【问题讨论】:
在哪里使用该调用取决于您的逻辑。通常,您可以在任何地方调用它。但是“它不起作用”是什么意思?请求是否未正确构建?没有正确发送?它是否返回任何错误? 看看我想做什么,我想我必须在我的商店功能中使用它。当我说它不起作用时,我的意思是它没有返回错误,但没有处理删除 【参考方案1】:您使用的网址不正确。对于单个项目的删除,您应该发送 DELETE 请求到
'https://api.zotero.org/users/MyUserID/items/' . $key
您还需要在请求中包含 If-Unmodified-Since-Version
标头。请看https://www.zotero.org/support/dev/web_api/v3/write_requests
此外,检查 API 返回的 HTTP 代码以检测问题总是值得的,例如400 Bad Request
表示您发送的请求不正确,另一方面,428 Precondition Required
表示请求已被理解,但(在此特定情况下)未提供必需的 If-Unmodified-Since-Version
标头。
【讨论】:
以上是关于如何在 Laravel 中使用 HTTP 请求的删除方法通过外部 Api 库删除项目的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 中使用不记名令牌从 api 请求中获取响应?
使用 Laravel 在 Azure 中来自单个请求的多个重复 HTTP 请求/查询