Ad Manager API มีทั้งการเปิดตัวเวอร์ชันหลักที่มีชื่อและการเปิดตัวแบบแทนที่ที่เข้ากันได้แบบย้อนหลังกับเวอร์ชันหลักปัจจุบัน
ระบบอาจทำเครื่องหมายบริการ วิธีการ และช่องว่าเลิกใช้งานได้ทุกเมื่อภายใน เวอร์ชันหลัก (เช่น v1) แต่จะยังคงรองรับต่อไปจนกว่าจะเลิกใช้งานเวอร์ชันหลักนั้น
การเปิดตัวเวอร์ชันหลัก
การเผยแพร่เวอร์ชันหลักหมายถึงการเผยแพร่ที่มีการเปลี่ยนแปลง API ที่เข้ากันไม่ได้กับเวอร์ชันก่อนหน้า โดยการเปิดตัวเหล่านี้จะมีชื่อและมีปลายทาง API ที่แตกต่างกัน ระบบจะรองรับเวอร์ชันหลักก่อนหน้าในช่วงระยะเวลาการย้ายข้อมูล
API ของ Ad Manager ไม่มีรอบการเผยแพร่รุ่นปกติสำหรับเวอร์ชันหลัก เราจะเผยแพร่เวอร์ชันหลักใหม่เมื่อจำเป็นเท่านั้น
การเผยแพร่ในสถานที่
การเปลี่ยนแปลงที่เข้ากันได้แบบย้อนหลัง ซึ่งรวมถึงฟีเจอร์ใหม่และการแก้ไขข้อบกพร่อง จะได้รับการเผยแพร่ในเวอร์ชัน API หลักปัจจุบัน ไคลเอ็นต์ต้องจัดการฟิลด์ที่ไม่รู้จัก ในการตอบกลับ API
ความเข้ากันได้แบบย้อนหลัง
เราจะคงความเข้ากันได้กับรุ่นก่อนหน้าสำหรับการเปลี่ยนแปลงภายในเวอร์ชันหลัก ความเข้ากันได้มีการกำหนดไว้ดังนี้
ความเข้ากันได้ของแหล่งที่มา: โค้ดที่เขียนเทียบกับรุ่นก่อนหน้าจะคอมไพล์เทียบกับรุ่นใหม่กว่า และทำงานได้สำเร็จด้วยไลบรารีไคลเอ็นต์เวอร์ชันใหม่กว่า
ความเข้ากันได้ของ Wire: โค้ดที่เขียนเทียบกับรุ่นก่อนหน้าจะสื่อสารกับเซิร์ฟเวอร์รุ่นใหม่กว่าได้อย่างถูกต้อง กล่าวคือ ไม่เพียงแต่จะมีการรองรับอินพุต และเอาต์พุตเท่านั้น แต่ยังมีการคาดการณ์เกี่ยวกับการซีเรียลไลซ์และการดีซีเรียลไลซ์ ที่ตรงกันอีกด้วย
ความเข้ากันได้เชิงความหมาย: โค้ดที่เขียนเทียบกับเวอร์ชันก่อนหน้าจะยังคงได้รับสิ่งที่นักพัฒนาแอปส่วนใหญ่คาดหวัง
ตารางต่อไปนี้แสดงประเภทการเปลี่ยนแปลง API และระบุว่าการเปลี่ยนแปลงนั้นถือว่า เข้ากันได้แบบย้อนหลังหรือไม่
บริการ
| ประเภทการเปลี่ยนแปลง | เข้ากันได้แบบย้อนหลัง |
|---|---|
| เพิ่มบริการใหม่ | ใช่ |
| นำบริการออก | ไม่ |
เมธอด
| ประเภทการเปลี่ยนแปลง | เข้ากันได้แบบย้อนหลัง |
|---|---|
| เพิ่มวิธีการใหม่ | ใช่ |
| นำวิธีออก | ไม่ |
| เปลี่ยนประเภทคำขอหรือการตอบกลับของเมธอด | ไม่ |
วัตถุ
| ประเภทการเปลี่ยนแปลง | เข้ากันได้แบบย้อนหลัง |
|---|---|
| เพิ่มช่องที่ต้องกรอก | ไม่ |
| เพิ่มช่อง (ไม่บังคับ) | ใช่ |
| การย้ายฟิลด์เข้าหรือออกจากข้อความย่อย | ไม่ |
| เปลี่ยนช่องจากต้องกรอกเป็นไม่บังคับ | ใช่ |
| เปลี่ยนช่องจากไม่บังคับเป็นต้องกรอก | ไม่ |
| นำข้อจำกัดที่เปลี่ยนแปลงไม่ได้ออก | ใช่ |
| เพิ่มข้อจำกัดที่เปลี่ยนแปลงไม่ได้ | ไม่ |
การแจงนับ
| ประเภทการเปลี่ยนแปลง | เข้ากันได้แบบย้อนหลัง |
|---|---|
| เพิ่มค่า enum | ใช่ |
| นำค่า enum ออก | ไม่ |
ลักษณะการทำงานของฟิลด์ที่เลิกใช้งานแล้ว
ฟิลด์แทนที่
สำหรับฟิลด์ที่มีการแทนที่ ระบบจะป้อนข้อมูลทั้ง 2 ฟิลด์เมื่อเป็นไปได้
เมื่ออัปเดต คุณจะตั้งค่าฟิลด์ใดก็ได้ การรวมทั้ง 2 ฟิลด์ไว้ในคำขออัปเดตจะทำให้เกิดข้อผิดพลาด INVALID_ARGUMENT
ลองพิจารณาแผนผังต่อไปนี้
{
// The cost of this Foo in micros.
// Deprecated: Use `cost` instead.
"costMicros": number,
// The cost of this Foo.
"cost": {
object (Money)
}
}
การตอบกลับการอ่านจะป้อนค่าที่เทียบเท่าลงในทั้ง 2 ฟิลด์
{
"costMicros": 1250000,
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 250000000
}
}
คำขออัปเดตสามารถตั้งค่าใดค่าหนึ่งได้ การรวมทั้ง 2 ฟิลด์จะทำให้เกิดข้อผิดพลาด INVALID_ARGUMENT
costMicros
// Update payload
{
"costMicros": 1500000
}
// Response payload
{
"costMicros": 1500000,
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 500000000
}
}
ต้นทุน
// Update payload
{
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 500000000
}
}
// Response payload
{
"costMicros": 1500000,
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 500000000
}
}
ทั้งคู่
// Update payload
{
"costMicros": 1250000,
"cost": {
"currencyCode": "USD",
"units": "1",
"nanos": 500000000
}
}
// Response payload
{
"error": {
"code": 400,
"message": "Request contains an invalid argument.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.BadRequest",
"fieldViolations": [
{
"field": "costMicros",
"description": "Cannot update both costMicros and cost."
}
]
}
]
}
}
ฟีเจอร์ที่หยุดให้บริการ
หากเลิกใช้งานฟีเจอร์ผลิตภัณฑ์ ระบบจะทำเครื่องหมายฟิลด์ที่เกี่ยวข้องเป็น เลิกใช้งานแล้ว และอาจแสดงค่าเริ่มต้นที่เหมาะสมตามความหมาย คุณ ไม่จำเป็นต้องสนใจการอัปเดต
{
// The salesperson split amount in micros.
// Deprecated: The Sales Management feature has been deprecated. This field
// will always be `0`.
"salespersonSplitMicros": number,
}