جديدالجمعة السوداء: خصم ٥٠٪ على دفعتك الأولى
استكشاف أخطاء ووردبريس

واجه API REST خطأ

شيء ما أجاب على الطلب الذي لم يكن WordPress ، أو أجاب عليه مع HTML. يتوقف المحرر عن العمل أولاً ، لأنه يعتمد على واجهة برمجة التطبيقات لكل شيء.

The REST API encountered an error: The REST API request failed due to an error.

الإجابة المختصرة

اطلب مسار REST مباشرة وانظر إلى ما يعود. JSON يعني أن واجهة برمجة التطبيقات على قيد الحياة والمشكلة هي المصادقة ؛ صفحة خطأ HTML تعني شيئًا أمام WordPress اعترضت الطريق قبل إجابة PHP.

التشخيص

الأسباب الأرجح أولًا.

افحص القائمة بالترتيب. يتيح لك كل فحص تأكيد السبب أو استبعاده قبل تغيير أي شيء، لأن الحلول تختلف والتخمين يكلّف أكثر من تنفيذ أمر للتحقق.

السببكيفية التحققالإصلاح
A ملحق أمان أو WAF كتل الطريقالطلب يعيد HTML أو 403 من شيء ليس WordPress ، ويتم تسجيل الكتلة بواسطة المكون الإضافي أو جدار الحماية بدلاً من WordPress.السماح /wp-json/ للمستخدمين المصادق عليهم. القواعد المكتوبة لإيقاف تعداد المستخدم كثيرا ما تمنع مساحة الاسم بالكامل بدلا من نقطة النهاية الواحدة التي كانت تستهدفها.
الروابط الثابتة مكسورة بحيث لا يتم حل الطريق أبداًالطريق الجميل 404s بينما يجيب نموذج سلسلة الاستعلام بشكل صحيح. هذا الاختلاف يعزلها لإعادة كتابة القواعد.اغسل القواعد التي أعيد كتابتها. مسار REST هو إعادة كتابة مثل أي مسار آخر ، لذلك يختفي عندما تكون قديمة.
يتم تجريد ترويسة التفويضتعمل الطرق غير المصادق عليها وتفيد المسارات المصادق عليها أنك لم تسجل الدخول ، على الرغم من أنك كذلك.مرر رأس التفويض إلى PHP على خادم الويب. تقوم إعدادات نمط CGI بإفلاته افتراضيًا ، وتتوقف كلمات مرور التطبيق عن العمل تمامًا عندما تفعل ذلك.
ينبعث البرنامج المساعد الإخراج قبل JSONالرد هو JSON صالح مع شيء أمامه - إشعار ، سطر فارغ طائش - مما يجعله غير قابل للتفسير.ابحث عن طباعة المكون الإضافي مبكرًا. عادة ما يؤدي نفس الإخراج الضال إلى كسر الخلاصات وينتج تحذيرًا مرسلًا بالفعل في مكان آخر.
الدليل

الإصلاح خطوة بخطوة.

تفترض الأوامر توفر WP-CLI والوصول إلى سطر الأوامر. إن لم يتوفرا، تشرح كل خطوة الإجراء كي تنفذه من لوحة التحكم أو عبر SFTP.

  1. اسأل API عن الفهرس

    لا يتطلب هذا المسار أي مصادقة ، لذا فإن أي شيء آخر غير JSON هو الحل.

    curl -sS -i https://example.com/wp-json/ | head -n 20
  2. قارن بين التوجيه الجميل والسهل

    إذا كان العمل الثاني لا يعمل، فإن إعادة كتابة القواعد هي المشكلة ولا شيء آخر يحتاج إلى اختبار.

    curl -sS -o /dev/null -w '%{http_code}\n' 'https://example.com/wp-json/wp/v2/types'
    curl -sS -o /dev/null -w '%{http_code}\n' 'https://example.com/?rest_route=/wp/v2/types'
  3. إعادة بناء قواعد إعادة الكتابة

    رخيصة وآمنة، ويحدد حصة مفاجئة من هذه.

    wp rewrite flush --hard
  4. تأكيد بقاء ترويسة التفويض

    أضف هذا إلى خادم الويب أو .htaccess عندما تكون الطرق المصادق عليها هي الوحيدة التي تفشل.

    # .htaccess
    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
    
    # nginx + fastcgi
    fastcgi_param HTTP_AUTHORIZATION $http_authorization;
  5. الإضافات Bisect إذا كان لا يزال فشل

    اختبر المسار بين كل تعطيل وليس في النهاية ، لذلك البرنامج المساعد الذي يصلحه لا لبس فيه.

    wp plugin deactivate --all
    curl -sS -o /dev/null -w '%{http_code}\n' https://example.com/wp-json/
على MagicWP

ما تتولاه المنصة عنك.

لا يوجد شيء بين الطلب و WordPress الذي يعيد كتابة أو فحص /wp-json / ، وبالتالي يصل المسار إلى PHP سليمًا ويصل الرأس معه - السببان اللذان يمثلان معظم هذه الأسباب. قواعد الرابط الثابت هي جزء من تكوين الموقع الخاص بدلاً من ملف مشترك تقوم المواقع الأخرى أيضًا بتحريره ، لذلك لا تذهب قديمة عند نشر شيء غير ذي صلة.

الأسئلة الشائعة

الأسئلة الشائعة.

هل يمكنني تعطيل واجهة برمجة تطبيقات REST؟
ليس حقا. محرر كتلة, صحة الموقع, كلمات السر التطبيق والكثير من wp-admin مبنية على ذلك, تعطيل حتى أنه يكسر المشرف بدلا من تأمينه. تقييد طرق محددة للمستخدمين مصادق عليها هو نسخة معقولة من هذه الفكرة.
يقول المحرر "فشل التحديث" - هل هذه هي المشكلة نفسها؟
عادة نعم. يحفظ المحرر من خلال واجهة برمجة تطبيقات REST ، لذلك تظهر استجابة محظورة أو مشوهة هناك أولاً ، وتكون عمليات التحقق في هذه الصفحة هي الصحيحة لتشغيلها.
لماذا يعمل عندما يتم تسجيل الخروج ولكن لم يتم تسجيل الدخول؟
يشير ذلك إلى رأس التفويض أو ملف تعريف الارتباط nonce بدلاً من التوجيه. لم تكن الطرق غير المصادق عليها بحاجة إليها أبدًا ، ولهذا السبب تستمر في العمل.
هل 404 على /wp-json / يختلف عن 403؟
نعم، ومن المفيد ذلك. A 404 يعني أنه لم يتم العثور على المسار، وهو إعادة كتابة القواعد. A 403 يعني شيئا وجدت ورفض، وهي قاعدة أمنية.
أخطاء مرتبطة

إن لم يكن هذا هو السبب.

قد تبدو هذه الأخطاء متشابهة في المتصفح.