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

问题描述 投票:0回答:1

我正在使用 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');
来实现我需要做的事情。 例如,要删除第一个项目,我在重定向()-> back()之前在存储函数中尝试这样做

   //delete from api lib
    $key=$collections[0]->key;
    Http::withToken('MyApiKey')->delete('https://api.zotero.org/users/MyUserID/items/keys/'.$key);

但是不起作用。

php laravel httprequest
1个回答
0
投票

您使用的网址不正确。对于单个项目删除,您应该发送删除请求至

'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
标头。

© www.soinside.com 2019 - 2024. All rights reserved.