Preskočiť na obsah
ShopentlyLearn

Natrvalo mazať komentáre

Články, autori, moderované komentáre a plánované publikovanie.

DELETE/api/v1/addons/shopently.blog/comments/{comment_id}

Overovanie
Bearer
Dostupné od plánu
BASIC
Vyžadovaný nainštalovaný modul
shopently.blog · Verzia kontraktu modulu 1
Požadované oprávnenia
addon.shopently.blog:comment_delete

Príklady kódu

Príklad požiadavky

cURL

: "${SHOPENTLY_SHOP_URL:?}"

curl --disable --globoff --fail-with-body --silent --show-error \
  --proto '=https' --connect-timeout 5 --max-time 30 \
  --request DELETE \
  --header "Authorization: Bearer ${SHOPENTLY_ACCESS_TOKEN:?}" \
  --header 'Idempotency-Key: learn-dbfd0f326d2c40a1ab9ef52e31b46a3d' \
  --url "${SHOPENTLY_SHOP_URL%/}"'/api/v1/addons/shopently.blog/comments/2247b58d-1521-4fc0-9eec-6c47c259c181?expected_version=3'

PHP

<?php
declare(strict_types=1);

$baseUrl = rtrim(getenv('SHOPENTLY_SHOP_URL') ?: '', '/');
$origin = parse_url($baseUrl);
if (!$origin || ($origin['scheme'] ?? '') !== 'https' || empty($origin['host']) ||
    isset($origin['user'], $origin['pass']) || isset($origin['user']) || isset($origin['path']) ||
    isset($origin['query']) || isset($origin['fragment'])) {
    throw new RuntimeException('SHOPENTLY_SHOP_URL must be an HTTPS origin');
}
$credential = getenv('SHOPENTLY_ACCESS_TOKEN') ?: '';
if ($credential === '' || strpbrk($credential, "\r\n") !== false) {
    throw new RuntimeException('Invalid credential');
}
$headers = ['Idempotency-Key: learn-dbfd0f326d2c40a1ab9ef52e31b46a3d'];
$headers[] = 'Authorization: Bearer ' . $credential;
$responseHeaders = [];
$handle = curl_init($baseUrl . '/api/v1/addons/shopently.blog/comments/2247b58d-1521-4fc0-9eec-6c47c259c181?expected_version=3');
curl_setopt_array($handle, [
    CURLOPT_CUSTOMREQUEST => 'DELETE',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_PROTOCOLS => CURLPROTO_HTTPS,
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HEADERFUNCTION => static function ($handle, string $line) use (&$responseHeaders): int {
        if (str_contains($line, ':')) {
            [$name, $value] = explode(':', $line, 2);
            $responseHeaders[strtolower(trim($name))] = trim($value);
        }
        return strlen($line);
    },
]);
$raw = curl_exec($handle);
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
$error = curl_error($handle);
curl_close($handle);
if ($raw === false) {
    throw new RuntimeException('Transport error: ' . $error);
}
if ($status < 200 || $status >= 300) {
    throw new RuntimeException('HTTP ' . $status . '; request_id=' .
        ($responseHeaders['x-request-id'] ?? '') . '; retry_after=' . ($responseHeaders['retry-after'] ?? ''));
}
$result = $raw === '' ? null : json_decode($raw, true, 512, JSON_THROW_ON_ERROR | JSON_BIGINT_AS_STRING);
echo json_encode($result, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), PHP_EOL;

Python

from contextlib import ExitStack
import json
import os
from urllib.parse import urlsplit

import requests  # python -m pip install requests

base_url = os.environ["SHOPENTLY_SHOP_URL"].rstrip("/")
origin = urlsplit(base_url)
if origin.scheme != "https" or not origin.hostname or origin.username or origin.password or origin.path or origin.query or origin.fragment:
    raise ValueError("SHOPENTLY_SHOP_URL must be an HTTPS origin")
credential = os.environ['SHOPENTLY_ACCESS_TOKEN']
if not credential or "\r" in credential or "\n" in credential:
    raise ValueError("Invalid credential")
headers = {'Idempotency-Key': 'learn-dbfd0f326d2c40a1ab9ef52e31b46a3d'}
headers["Authorization"] = 'Bearer' + " " + credential
body = None
if body is not None:
    headers["Content-Type"] = "application/json"

with ExitStack() as stack:
    session = stack.enter_context(requests.Session())
    files = None
    if False:
        image = stack.enter_context(open(os.environ["SHOPENTLY_IMAGE_FILE"], "rb"))
        if os.fstat(image.fileno()).st_size > 5242880:
            raise ValueError("Image exceeds 5 MiB")
        files = {"file": ("article.png", image, "image/png")}
    response = session.request(
        'DELETE', base_url + '/api/v1/addons/shopently.blog/comments/2247b58d-1521-4fc0-9eec-6c47c259c181?expected_version=3', headers=headers,
        data=body.encode("utf-8") if body is not None else None, files=files,
        timeout=(5, 30), allow_redirects=False,
    )
    if not 200 <= response.status_code < 300:
        raise RuntimeError(f"HTTP {response.status_code}; request_id={response.headers.get('X-Request-ID', '')}; retry_after={response.headers.get('Retry-After', '')}")
    if False:
        if response.headers.get("Content-Type") != "image/webp" or len(response.content) > 5242880:
            raise ValueError("Unexpected image response")
        with open(os.environ["SHOPENTLY_OUTPUT_FILE"], "xb") as output:
            output.write(response.content)
    else:
        result = response.json() if response.content else None
        print(json.dumps(result, ensure_ascii=False, indent=2))

Príklad odpovede 200

JSON
{
  "data": {
    "deleted": true,
    "id": "2247b58d-1521-4fc0-9eec-6c47c259c181"
  },
  "meta": {
    "request_id": "5abc9cff-5213-4dac-9047-6300f6b5b1ae"
  }
}

Prehľad

Veďte blog obchodu s HTML článkami, fotografiami, autormi a metadátami pre vyhľadávače. Ukladajte koncepty, pripravujte preklady a publikujte ihneď alebo vo vybranom čase a časovom pásme. Komentáre a moderovanie spravujte v paneli; externý generátor môže využívať API s pridelenými oprávneniami.

BASIC · api.enabled · addons.use(shopently.blog) · addon.shopently.blog:comment_delete

Parametre

Parametre cesty

comment_idReťazecPovinné

Identifikátor zdroja; zachovajte ho v podobe, v akej bol vrátený.

format: "uuid"
Príklad: "2247b58d-1521-4fc0-9eec-6c47c259c181"

Parametre dopytu

expected_versionCelé čísloPovinné

Verzia načítaná pred zápisom; pri nezhode sa aktualizácia odmietne.

minimum: 1maximum: 9223372036854775807
Príklad: 3

Hlavičky požiadavky

Idempotency-KeyReťazecPovinné

Jedinečný identifikátor jednej logickej operácie zápisu.

minLength: 1maxLength: 128
Obmedzenia
pattern
"^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
Príklad: "learn-dbfd0f326d2c40a1ab9ef52e31b46a3d"

Táto operácia neprijíma telo JSON.

Odpovede

Odpoveď 200

dataObjektĎalšie polia: NiePovinné

Obsah úspešnej odpovede.

Polia · data
deletedLogická hodnotaPovinné

Či bolo zmazanie vykonané.

const: true
idReťazecPovinné

Identifikátor zdroja; zachovajte ho v podobe, v akej bol vrátený.

format: "uuid"
metaObjektĎalšie polia: NiePovinné

Metaúdaje odpovede.

Polia · meta
request_idReťazecPovinné

Identifikátor požiadavky; v metaúdajoch odpovede označuje požiadavku HTTP.

minLength: 1maxLength: 100
Príklad odpovede

Stav HTTP

200
Úspešná odpoveď Schéma
400
Neplatná požiadavka
401
Vyžaduje sa overenie
403
Prístup zamietnutý
404
Zdroj sa nenašiel
409
Konflikt verzií
422
Chyba validácie
429
Prekročený limit požiadaviek
Ďalšie stavy HTTP (7)
405
Metóda nie je povolená
413
Príliš veľká požiadavka
415
Nepodporovaný formát
500
Chyba servera
502
Chyba brány API
503
Služba nedostupná
504
Vypršal časový limit

Katalóg chýb: ErrorResponse

Hlavičky

401

WWW-AuthenticateReťazecVoliteľné

Spôsob overenia požadovaný serverom.

405

AllowReťazecVoliteľné

Metódy HTTP podporované týmto zdrojom.

429, 503

Retry-AfterCelé čísloVoliteľné

Minimálne oneskorenie pred opakovaním v sekundách.

minimum: 0