如何在Laravel中使用HTTP请求的删除方法通过外部API库删除项目



基本上我使用Zotero的API从我的(Zotero)库中获取项目并将它们保存在我的DB中。

当我点击提交按钮,数据被保存,但我想在同一时刻删除它从在线zotero的库与http请求的删除方法。

以下是API文档中关于delete的说明:

URI:/keys/<key>
给定API密钥的用户id和权限。使用DELETE HTTP方法删除密钥。这通常应该只由最初使用OAuth创建密钥的客户端完成。

数据的Json结构如下:

结构这是我的控制器:

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

My function store:

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);

但是行不通

您使用的URL不正确。对于单个条目的删除,你应该发送一个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头没有提供。

相关内容

最新更新