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 ขั้นต่ำที่ข้อมูลเข้าสู่ระบบของแอปแต่ละรายการต้องมีสิทธิ์เข้าถึง คุณสามารถวิเคราะห์ข้อมูลนี้ได้ด้วยรายงาน Analytics ของ 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

อัปเดตแพ็กเกจทั้งหมดเพื่อให้มีการปรับใช้แพ็กเกจเวอร์ชันเดียวในสภาพแวดล้อม โดยไม่คำนึงถึงเส้นทางฐาน

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

การแก้ปัญหา: ใบรับรองช่วงทดลองใช้ในโฮสต์เสมือน

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

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

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

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

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

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

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

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

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