تعديل التعليق
تعديل محتوى التعليقات
PATCH/api/v1/addons/shopently.blog/comments/{comment_id}
- المصادقة
Bearer- متاح بدءًا من
- BASIC
- الوحدة المثبتة المطلوبة
shopently.blog· إصدار عقد الوحدة 1- الصلاحيات المطلوبة
addon.shopently.blog:comment_update
أمثلة الكود
مثال على الطلب
cURL
: "${SHOPENTLY_SHOP_URL:?}"
curl --disable --globoff --fail-with-body --silent --show-error \
--proto '=https' --connect-timeout 5 --max-time 30 \
--request PATCH \
--header "Authorization: Bearer ${SHOPENTLY_ACCESS_TOKEN:?}" \
--header 'Idempotency-Key: learn-ae0f6a6cce974caf851849a6b07346bd' \
--header 'Content-Type: application/json' \
--data-raw '{
"body": "Zapraszamy do pytań o opisane właściwości.",
"expected_version": 1
}' \
--url "${SHOPENTLY_SHOP_URL%/}"/api/v1/addons/shopently.blog/comments/2247b58d-1521-4fc0-9eec-6c47c259c181
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-ae0f6a6cce974caf851849a6b07346bd', 'Content-Type: application/json'];
$headers[] = 'Authorization: Bearer ' . $credential;
$responseHeaders = [];
$handle = curl_init($baseUrl . '/api/v1/addons/shopently.blog/comments/2247b58d-1521-4fc0-9eec-6c47c259c181');
curl_setopt_array($handle, [
CURLOPT_CUSTOMREQUEST => 'PATCH',
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);
},
]);
curl_setopt($handle, CURLOPT_POSTFIELDS, '{
"body": "Zapraszamy do pytań o opisane właściwości.",
"expected_version": 1
}');
$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-ae0f6a6cce974caf851849a6b07346bd'}
headers["Authorization"] = 'Bearer' + " " + credential
body = '{\n "body": "Zapraszamy do pytań o opisane właściwości.",\n "expected_version": 1\n}'
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(
'PATCH', base_url + '/api/v1/addons/shopently.blog/comments/2247b58d-1521-4fc0-9eec-6c47c259c181', 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))
مثال على الاستجابة 200
{
"data": {
"id": "2247b58d-1521-4fc0-9eec-6c47c259c181",
"status": "approved",
"version": 2
},
"meta": {
"request_id": "e516af19-6108-4575-85e3-140b41b01426"
}
}
نظرة عامة
أدر مدونة متجرك بمقالات HTML وصور وكتّاب وبيانات وصفية لمحركات البحث. احفظ المسودات وأعد الترجمات وانشر فورًا أو في موعد تحدده ضمن منطقة زمنية معينة. أدر التعليقات ومراجعتها من اللوحة، ويمكن لمولّد خارجي استخدام API بالصلاحيات التي تمنحها.
BASIC · api.enabled · addons.use(shopently.blog) · addon.shopently.blog:comment_update
المعاملات
معلمات المسار
comment_idسلسلة نصيةمطلوبمعرّف المورد؛ احتفظ به كما أعيد.
format:"uuid"
ترويسات الطلب
Idempotency-Keyسلسلة نصيةمطلوبمعرّف فريد لعملية كتابة منطقية واحدة.
minLength:1maxLength:128القيود
pattern"^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
محتوى الطلب
application/json · مطلوب
bodyسلسلة نصيةمطلوبالتعليق
minLength:1maxLength:5000expected_versionعدد صحيحمطلوبالإصدار المقروء قبل الكتابة؛ يؤدي عدم التطابق إلى رفض التحديث.
minimum:1maximum:9223372036854775807
الاستجابات
الاستجابة 200
dataكائنحقول إضافية: لامطلوبمحتوى الاستجابة الناجحة.
الحقول ·
dataidسلسلة نصيةمطلوبمعرّف المورد؛ احتفظ به كما أعيد.
format:"uuid"statusسلسلة نصيةمطلوبالحالة التي تقبلها هذه العملية تحديدًا.
القيود
enum["pending", "approved", "rejected", "spam"]
versionعدد صحيحمطلوبإصدار المورد المستخدم للتحكم في التعديلات المتزامنة.
minimum:1maximum:9223372036854775807
metaكائنحقول إضافية: لامطلوبالبيانات الوصفية للاستجابة.
الحقول ·
metarequest_idسلسلة نصيةمطلوبمعرّف الطلب؛ في البيانات الوصفية للاستجابة يحدد طلب HTTP.
minLength:1maxLength:100
حالة HTTP
200- استجابة ناجحة المخطط
400- طلب غير صالح
401- المصادقة مطلوبة
403- الإذن مرفوض
404- المورد غير موجود
409- تعارض الإصدارات
422- فشل التحقق من البيانات
429- تم تجاوز حد الطلبات
حالات HTTP الأخرى (7)
405- الطريقة غير مسموحة
413- الطلب كبير جدًا
415- تنسيق غير مدعوم
500- خطأ في الخادم
502- خطأ في بوابة API
503- الخدمة غير متاحة
504- انتهت مهلة الانتظار
دليل الأخطاء: ErrorResponse
الترويسات
401
WWW-Authenticateسلسلة نصيةاختيارينظام المصادقة الذي يطلبه الخادم.
405
Allowسلسلة نصيةاختياريطرق HTTP التي يدعمها هذا المورد.
429, 503
Retry-Afterعدد صحيحاختياريالحد الأدنى للانتظار قبل إعادة المحاولة، بالثواني.
minimum:0