Apigee Edge ไปยัง Antipattern สำหรับการย้ายข้อมูล Apigee X

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
info

ในฐานะลูกค้า Apigee Edge ปัจจุบัน คุณอาจเลือกที่จะย้ายข้อมูลการติดตั้งไปยัง Apigee X เพื่อใช้ประโยชน์จากความสามารถใหม่ๆ หรือความพร้อมให้บริการในภูมิภาคที่แตกต่างกัน

หน้านี้อธิบายรูปแบบที่ไม่ควรใช้ในการกำหนดค่าซึ่งคุณจะต้องแก้ไข ก่อนที่จะย้ายข้อมูลไปยัง Apigee X รวมถึงการเปลี่ยนแปลงลักษณะการทำงานอื่นๆ ที่คุณควรทราบ ก่อนที่จะย้ายข้อมูล

รายการรูปแบบที่ไม่ควรใช้ใน Apigee Edge ที่ครอบคลุมมากขึ้นจะอธิบายแนวทางปฏิบัติในการใช้งานที่ควรหลีกเลี่ยงในทุกกรณี หน้านี้อธิบายแนวทางปฏิบัติในการใช้งานที่ไม่แนะนำซึ่งจะบล็อกการย้ายข้อมูล โปรดแก้ไขปัญหาเหล่านี้ตอนนี้เพื่อป้องกันปัญหาเมื่อย้ายข้อมูลไปยัง Apigee X

แอปที่ไม่มีผลิตภัณฑ์ API

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

มีแอปที่ไม่มีผลิตภัณฑ์ API

ความแตกต่างระหว่าง Apigee Edge กับ Apigee X

Apigee Edge Apigee X
คุณสามารถกำหนดค่าแอปและข้อมูลเข้าสู่ระบบที่ไม่ได้ เชื่อมโยงกับผลิตภัณฑ์ API ใดๆ ได้ แอปนี้มีสิทธิ์เข้าถึง ผลิตภัณฑ์ API ทั้งหมด ต้องกำหนดค่าแต่ละแอปให้เข้าถึงผลิตภัณฑ์ API อย่างน้อย 1 รายการ ไม่มีวิธีให้สิทธิ์เข้าถึงผลิตภัณฑ์ API ทั้งหมดโดยนัย คุณสามารถกำหนดค่าแอปให้มีสิทธิ์เข้าถึงผลิตภัณฑ์ API ทั้งหมดได้ แต่ต้องดำเนินการอย่างชัดเจน
ไม่

ความละเอียด: แอปที่ไม่มีผลิตภัณฑ์ API

เชื่อมโยงข้อมูลเข้าสู่ระบบของแอปทุกรายการกับผลิตภัณฑ์ API อย่างน้อย 1 รายการ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีดำเนินการนี้ได้ที่ลงทะเบียนแอปและจัดการคีย์ API

วิธีที่ง่ายคือการให้สิทธิ์เข้าถึงผลิตภัณฑ์ API ทั้งหมดแก่แอปแต่ละแอป ซึ่งจะเทียบเท่ากับสิ่งที่ทำได้ใน Apigee Edge ความท้าทายจะเกิดขึ้นหากคุณต้องการใช้แนวทาง "สิทธิ์ขั้นต่ำ" คุณจะต้องกำหนดรายการผลิตภัณฑ์ API ขั้นต่ำ ที่ข้อมูลเข้าสู่ระบบของแต่ละแอปต้องมีสิทธิ์เข้าถึง คุณวิเคราะห์ข้อมูลนี้ได้ด้วย รายงานข้อมูลวิเคราะห์ Apigee Edge โดยอิงตามรหัสไคลเอ็นต์

แคชที่ไม่มีเวลาหมดอายุ

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

แคชไม่มีเวลาหมดอายุ

ความแตกต่างระหว่าง Apigee Edge กับ Apigee X

Apigee Edge Apigee X
รองรับการสร้าง อัปเดต และลบตัวอธิบายทรัพยากรแคช ไม่รองรับการสร้าง อัปเดต หรือลบตัวอธิบายทรัพยากรแคช
ไม่

การแก้ไข: แคชที่ไม่มีเวลาหมดอายุ

ตั้งเวลาหมดอายุสำหรับแคชทั้งหมด

นิพจน์ตัวกรอง JSONPath ในเส้นทางที่ไม่แน่นอน

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

สำหรับการค้นหาเส้นทางที่ไม่แน่นอน การค้นหาผลลัพธ์ของนิพจน์ตัวกรองไม่ได้เป็นส่วนหนึ่งของ ข้อกำหนด JSONPath ดูที่ https://goessner.net/articles/JsonPath/

ความแตกต่างระหว่าง Apigee Edge กับ Apigee X

เมื่อไปยังส่วนต่างๆ ของโครงสร้างตัวอย่างนี้

{
    "books": [
      {
        "name": "A",
      },
      {
        "name": "B",
      }
    ]
}

โดยใช้การแสดงผล $..books[?(@.name == 'A')][0]

Apigee Edge Apigee X
เอาต์พุต ‘{"name": "A"}’ เอาต์พุต []

โดยใช้การแสดงผล $..books[?(@.name == 'A')][0].name

Apigee Edge Apigee X
เอาต์พุต "A" เอาต์พุต []
ใช่

การแก้ไข: นิพจน์ตัวกรอง JSONPath ในเส้นทางที่ไม่แน่นอน

ค้นหาและแทนที่คำค้นหาที่ได้รับผลกระทบ

นิพจน์ JSONPath สำหรับดัชนีที่ไม่มีอยู่

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

นิพจน์ JSONPath ที่มีดัชนีที่ไม่มีอยู่จะมีลักษณะการทำงานที่แตกต่างกันใน Apigee X และ Apigee Edge Apigee X จะแสดงข้อผิดพลาด PathNotFoundException เมื่อไม่พบ เส้นทาง

ความแตกต่างระหว่าง Apigee Edge กับ Apigee X

เมื่อไปยังส่วนต่างๆ ของโครงสร้างตัวอย่างนี้

{
    "books": [
      {
        "name": "A",
      },
      {
        "name": "B",
      }
    ]
}

โดยใช้การแสดงผล $.books[3]

Apigee Edge Apigee X
เอาต์พุต null เอาต์พุต PathNotFoundException ข้อผิดพลาด
ใช่

การแก้ไข: นิพจน์ JSONPath สำหรับดัชนีที่ไม่มีอยู่

ค้นหาและแทนที่คำค้นหาที่ได้รับผลกระทบ

นิพจน์ JSONPath ที่มีดัชนีอาร์เรย์ซึ่งไม่ได้แสดงผลออบเจ็กต์อาร์เรย์

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

นิพจน์ JSONPath ที่มีดัชนีอาร์เรย์หรือสไลซ์จะแสดงผลออบเจ็กต์อาร์เรย์ใน Apigee X

ความแตกต่างระหว่าง Apigee Edge กับ Apigee X

เมื่อไปยังส่วนต่างๆ ของโครงสร้างตัวอย่างนี้

{
    "books": [
      {
        "name": "A",
      },
      {
        "name": "B",
      }
    ]
}

โดยใช้การแสดงผล $.books

Apigee Edge Apigee X
เอาต์พุต {“name”:”A”, “name”: “B”} เอาต์พุต [{“name”:”A”, “name”: “B”}]

โดยใช้การแสดงผล $.books[-1]

Apigee Edge Apigee X
เอาต์พุต {“name”: “B”} เอาต์พุต [{“name”: “B”}]

โดยใช้การแสดงผล $.books[-2:]

Apigee Edge Apigee X
เอาต์พุต {“name”:”A”, “name”: “B”} เอาต์พุต [{“name”:”A”, “name”: “B”}]
ใช่

ความละเอียด: นิพจน์ JSONPath ที่มีดัชนีอาร์เรย์ซึ่งไม่ได้แสดงผลออบเจ็กต์อาร์เรย์

ค้นหาและแทนที่นิพจน์ที่อาจแสดงผลลัพธ์แตกต่างกันหลังการอัปเกรด

ข้อจำกัดชื่อคีย์สโตร์

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

ชื่อที่เก็บคีย์ Apigee X มีได้เฉพาะตัวอักษร ตัวเลข และขีดกลางเท่านั้น ชื่อที่เก็บคีย์ของ Edge ไม่ได้กำหนดข้อจำกัดเหล่านี้

ไม่

ความละเอียด: ข้อจำกัดของชื่อคีย์สโตร์

ตรวจสอบชื่อคลังคีย์และอัปเดตชื่อเพื่อนำอักขระที่ไม่รองรับออกหากจำเป็น

เส้นทางฐานหลายเส้นทางที่ทำให้ใช้งานได้สำหรับพร็อกซี API

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

มีการทำให้พร็อกซี API หลายเวอร์ชันใช้งานได้ในสภาพแวดล้อม และ แต่ละเวอร์ชันมีเส้นทางฐานที่แตกต่างกัน

ความแตกต่างระหว่าง Apigee Edge กับ Apigee X

Apigee Edge Apigee X
รองรับการติดตั้งใช้งานพร็อกซี API หลายเวอร์ชัน โดยแต่ละเวอร์ชันมีเส้นทางฐานที่แตกต่างกันได้ ไม่รองรับการติดตั้งใช้งานพร็อกซี API หลายเวอร์ชัน แม้ว่าพร็อกซีจะมีเส้นทางฐานที่แตกต่างกันก็ตาม
ไม่

ความละเอียด: มีการทำให้เส้นทางฐานหลายรายการใช้งานได้สำหรับพร็อกซี API

อัปเดตชุดทั้งหมดเพื่อให้มีการติดตั้งใช้งานชุดเพียง 1 ฉบับในสภาพแวดล้อม ไม่ว่าจะเป็นเส้นทางฐานใดก็ตาม

ข้อความ HTTP ที่ไม่เป็นไปตามข้อกำหนด

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

ไคลเอ็นต์หรือพร็อกซี API ส่งข้อความ (คำขอหรือการตอบกลับ) ที่ไม่เป็นไปตามมาตรฐาน HTTP เช่น ชื่อส่วนหัวไม่ถูกต้อง การทำซ้ำในส่วนหัวที่ถูกจำกัดบางส่วน เป็นต้น

คุณจะย้ายข้อมูลไปยัง Apigee X ไม่ได้หากการดำเนินการ API มีข้อผิดพลาดต่อไปนี้อย่างน้อย 1 รายการ

ข้อผิดพลาด รายละเอียด
INVALID_CHARACTERS_IN_HEADER พบอักขระที่ไม่ถูกต้องอย่างน้อย 1 ตัวในส่วนหัวที่ระบุ ชื่อส่วนหัวที่ถูกต้องประกอบด้วยตัวอักษรภาษาอังกฤษ ตัวเลข และขีดกลาง
MISSING_COLON ไม่มี : (โคลอน) ในคู่ชื่อส่วนหัวและค่าส่วนหัว
MULTIPLE_CONTENT_LENGTH มีการระบุค่าหลายค่าสำหรับส่วนหัว Content-Length
CONTENT_LENGTH_NOT_INTEGER ค่าส่วนหัว Content-Length ไม่ใช่จำนวนเต็ม
INVALID_UPGRADE ต้องใช้ส่วนหัว Upgrade เพื่อเปิดใช้การเชื่อมต่อ WebSocket เท่านั้น แต่ไม่ได้ใช้
URL_HEADER_SIZE_TOO_LONG ขนาดทั้งหมดของ URL คำขอและส่วนหัวเกินขนาดสูงสุดที่อนุญาต นั่นคือ 15 KB
BODY_NOT_ALLOWED ไม่อนุญาตให้ใช้เนื้อความของข้อความกับเมธอด "GET", "DELETE", "TRACE", "OPTIONS" และ "HEAD"
UNSUPPORTED_HTTP_VERSION มีการใช้ HTTP เวอร์ชันอื่นที่ไม่ใช่ 1.1 สำหรับคำขอ และระบบไม่รองรับ
ZERO_CONTENT_LENGTH_FOR_POST_OR_PUT มีการตั้งค่าฟิลด์ส่วนหัว Content-Length เป็น 0 ("0") สำหรับเมธอด "POST" หรือ "PUT"
UNSUPPORTED_RESPONSE_PREFIX มีคำนำหน้าส่วนหัว "X-Apigee-" ที่ไม่รองรับอยู่ในส่วนหัวการตอบกลับ
อาจเป็นไปได้

การแก้ไข: ข้อความ HTTP ที่ไม่เป็นไปตามข้อกำหนด

คุณต้องแก้ไขข้อผิดพลาดในโปรโตคอล HTTP ก่อนที่จะย้ายข้อมูลไปยัง Apigee X หากข้อผิดพลาดเกิดจากแอปพลิเคชันไคลเอ็นต์ คุณต้องขอให้นักพัฒนาแอปไคลเอ็นต์แก้ไขปัญหา

เวลาหมดอายุของโทเค็น OAuth 2.0 ไม่ถูกต้อง

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

ขีดจำกัดการหมดอายุของโทเค็น OAuth 2.0 อยู่นอกช่วงที่กำหนด

ความแตกต่างระหว่าง Apigee Edge กับ Apigee X

Apigee Edge Apigee X
ปัจจุบันยังไม่มีการบังคับใช้ข้อจำกัดเกี่ยวกับเวลาหมดอายุของโทเค็น OAuth 2.0 แต่ มีแผนที่จะบังคับใช้ ดูหลักเกณฑ์ได้ใน ส่วน OAuth ของหน้าขีดจำกัด คุณต้องตั้งค่าเวลาหมดอายุของโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรชสำหรับ OAuth 2.0 ช่วงที่รองรับ มีดังนี้
  • 180 วินาที <= เวลาหมดอายุของโทเค็นเพื่อการเข้าถึง OAuth 2.0 <= 30 วัน
  • 1 วัน <= เวลาหมดอายุของโทเค็นการรีเฟรช OAuth 2.0 <= 2 ปี
ไม่

การแก้ไข: เวลาหมดอายุของโทเค็น OAuth 2.0 ไม่ถูกต้อง

ใช้นโยบาย OAuthV2 และระบุเวลาหมดอายุใน <ExpiresIn> และ <RefreshTokenExpiresIn>

เกินขีดจำกัดของผลิตภัณฑ์

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

การกำหนดค่า Apigee Edge ไม่เป็นไปตามขีดจำกัดของผลิตภัณฑ์ที่กำหนดไว้ ขีดจำกัดของผลิตภัณฑ์บางอย่างที่บันทึกไว้แต่ไม่ได้ บังคับใช้ใน Apigee Edge จะบังคับใช้ใน Apigee X

ไม่

ความละเอียด: เกินขีดจำกัดของผลิตภัณฑ์

แก้ไขการใช้งานที่เกินขีดจำกัดของผลิตภัณฑ์ก่อน ย้ายข้อมูลไปยัง Apigee X

นโยบาย ServiceCallout ที่มีทั้งตัวระบุการเชื่อมต่อปลายทางและเส้นทางเป้าหมาย

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

ในนโยบาย ServiceCallout องค์ประกอบ <LocalTargetConnection> ควรรวมองค์ประกอบ <APIProxy> และ <ProxyEndpoint> หรือองค์ประกอบ <Path> แต่องค์ประกอบทั้ง 2 อย่างไม่ได้ ดูข้อมูลเพิ่มเติมได้ที่องค์ประกอบ <LocalTargetConnection>

Apigee Edge ระบุข้อกำหนดนี้ แต่ไม่ได้บังคับใช้ Apigee X จะหยุด การประมวลผลหากพบ <LocalTargetConnection> ที่มีการกำหนดค่าทั้ง 2 รายการ

ไม่

การแก้ปัญหา: นโยบาย ServiceCallout ที่มีทั้งตัวระบุการเชื่อมต่อเป้าหมายปลายทางและเส้นทาง

ตรวจสอบการกำหนดค่านโยบาย ServiceCallout และนำ <LocalTargetConnection> การกำหนดค่าที่ไม่เป็นไปตามข้อกำหนดออก

ข้อจำกัดของชื่อเซิร์ฟเวอร์เป้าหมาย

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

ชื่อเซิร์ฟเวอร์เป้าหมาย Apigee X มีได้เฉพาะตัวอักษร ตัวเลข ขีดกลาง และจุดเท่านั้น ชื่อเซิร์ฟเวอร์เป้าหมาย Edge จะไม่มีข้อจำกัดเหล่านี้

ไม่

การแก้ปัญหา: ข้อจำกัดของชื่อเซิร์ฟเวอร์เป้าหมาย

ตรวจสอบชื่อเซิร์ฟเวอร์เป้าหมายและอัปเดตชื่อเพื่อนำอักขระที่ไม่รองรับออกหากจำเป็น

ใบรับรองทดลองในโฮสต์เสมือน

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

โฮสต์เสมือนอย่างน้อย 1 รายการใช้ใบรับรอง "ทดลองใช้ฟรี" ที่ Apigee จัดหาให้ ซึ่งจะทำให้ โฮสต์เสมือนตอบสนองต่อคำขอในโดเมน เช่น ORG-ENV.apigee.net

ความแตกต่างระหว่าง Apigee Edge กับ Apigee X

Apigee Edge Apigee X
กำหนดค่า vhost "default" โดยอัตโนมัติเพื่อรองรับชื่อโดเมนในรูปแบบ ORG-ENV.apigee.net มีใบรับรองแบบไวลด์การ์ด ที่เรียกว่า "ใบรับรองช่วงทดลองใช้ฟรี" ซึ่งอนุญาตให้ใช้ TLS ใน โดเมนเหล่านี้ โดเมน Apigee เดิมในรูปแบบ ORG-ENV.apigee.net จะใช้ไม่ได้ใน Apigee X คุณต้องกำหนดค่าชื่อโดเมนของคุณเองและจัดสรร ใบรับรองอย่างเหมาะสม
ใช่

วิธีแก้ไข: ใบรับรองทดลองใช้ในโฮสต์เสมือน

คุณต้องกำหนดค่าโดเมนของคุณเองและจัดสรรใบรับรองอย่างเหมาะสม

แอปพลิเคชันไคลเอ็นต์ที่ขึ้นอยู่กับชื่อโดเมนเดิมของ form ORG-ENV.apigee.net ต้องได้รับการแก้ไขเพื่อเรียกโดเมนใหม่

DNS ที่ไม่ได้รับการแก้ไข

สรุป ต้องมีการเปลี่ยนแปลงฝั่งไคลเอ็นต์ไหม วิธีแก้ปัญหา

ปลายทางเป้าหมายมีชื่อโดเมนที่ยังไม่ได้รับการแก้ไข

ความแตกต่างระหว่าง Apigee Edge กับ Apigee X

Apigee Edge Apigee X
หากการแปลง DNS ไม่สำเร็จ Apigee จะต่อท้าย .apigee.com กับ ชื่อโดเมน และ DNS จะแปลงสำเร็จโดยมี รหัสการตอบกลับ 4xx หากการแปลง DNS ไม่สำเร็จ Apigee จะไม่ดำเนินการตามคำขอและ จะแสดงรหัสการตอบกลับ 5xx
ไม่

การแก้ปัญหา: DNS ที่ไม่ได้รับการแก้ไข

อัปเดตปลายทางเป้าหมายด้วยชื่อโดเมนที่ถูกต้อง