Google Play Developer API ช่วยให้คุณสามารถอัปโหลดรูปภาพ apk หรือexpansionfilesสำหรับการแก้ไข ด้านล่างนี้เราใช้รูปภาพเป็นตัวอย่าง
ตัวเลือกการอัปโหลด
Google Play Developer API ทำให้คุณอัปโหลดข้อมูลหรือสื่อไบนารีบางประเภทได้ จะมีการระบุลักษณะเฉพาะของข้อมูลที่คุณอัปโหลดไว้ในหน้าอ้างอิงสำหรับวิธีการที่รองรับการอัปโหลดสื่อ ดังนี้
- ขนาดไฟล์สูงสุดที่อัปโหลด: จำนวนข้อมูลสูงสุดที่คุณสามารถจัดเก็บด้วยวิธีนี้
- ประเภท MIME ของสื่อที่ยอมรับ: ประเภทข้อมูลไบนารีที่คุณจัดเก็บได้โดยใช้วิธีนี้
คุณส่งคำขออัปโหลดด้วยวิธีใดก็ได้ต่อไปนี้ ระบุวิธีที่คุณใช้กับพารามิเตอร์คำขอ uploadType
- การอัปโหลดอย่างง่าย:
uploadType=media
สำหรับการโอนไฟล์ขนาดเล็กอย่างรวดเร็ว เช่น ขนาดไม่เกิน 5 MB - การอัปโหลดหลายส่วน:
uploadType=multipart
เพื่อการโอนไฟล์ขนาดเล็กและข้อมูลเมตาอย่างรวดเร็ว จะโอนไฟล์พร้อมกับข้อมูลเมตาที่อธิบาย ทั้งหมดนี้ในคำขอเดียว - การอัปโหลดที่ดำเนินการต่อได้:
uploadType=resumable
เพื่อการโอนที่เชื่อถือได้ โดยเฉพาะอย่างยิ่งกับไฟล์ขนาดใหญ่ ด้วยวิธีการนี้ คุณจะใช้คำขอเริ่มต้นเซสชัน ซึ่งอาจรวมข้อมูลเมตาไว้ด้วยก็ได้ วิธีนี้เป็นกลยุทธ์ที่ดีสำหรับใช้กับแอปพลิเคชันส่วนใหญ่ เนื่องจากยังใช้ได้กับไฟล์ขนาดเล็กด้วยหากมีคำขอ HTTP เพิ่มเติมต่อการอัปโหลด 1 ครั้ง
เมื่อคุณอัปโหลดสื่อ คุณจะใช้ URI พิเศษ ที่จริงแล้ว เมธอดที่รองรับการอัปโหลดสื่อมีปลายทาง URI 2 จุด ได้แก่
URL /upload สำหรับสื่อ รูปแบบของปลายทางการอัปโหลดคือ URI ทรัพยากรมาตรฐานที่มีคำนำหน้า "/upload" ใช้ URI นี้เมื่อ การโอนข้อมูลสื่อด้วยตัวเอง
เช่น
POST /upload/androidpublisher/v3/applications/packageName/edits/editId/listings/language/imageType
URL ทรัพยากรมาตรฐานสำหรับข้อมูลเมตา หากทรัพยากรมี ช่องข้อมูลเหล่านี้จะใช้ในการจัดเก็บข้อมูลเมตาที่อธิบายถึงการอัปโหลด คุณสามารถใช้ URI นี้เมื่อสร้างหรืออัปเดตค่าข้อมูลเมตาได้
ตัวอย่าง
POST /androidpublisher/v3/applications/packageName/edits/editId/listings/language/imageType
การอัปโหลดอย่างง่าย
วิธีที่ง่ายที่สุดในการอัปโหลดไฟล์คือการสร้างคำขออัปโหลดง่ายๆ ตัวเลือกนี้เป็นตัวเลือกที่ดีในกรณีต่อไปนี้
- ไฟล์มีขนาดเล็กพอที่จะอัปโหลดอีกครั้งได้ หากการเชื่อมต่อล้มเหลว
- ไม่มีข้อมูลเมตาที่จะส่ง กรณีนี้อาจเป็นจริงหากคุณวางแผนที่จะส่งข้อมูลเมตาสำหรับทรัพยากรนี้ในคำขอแยกต่างหาก หรือหากไม่มีการสนับสนุนหรือไม่มีข้อมูลเมตาที่พร้อมให้ใช้งาน
หากต้องการใช้การอัปโหลดอย่างง่าย ให้ส่งคำขอ POST
หรือ PUT
เพื่อ
URI /upload ของเมธอด และเพิ่มพารามิเตอร์การค้นหา
uploadType=media
เช่น
POST https://www.googleapis.com/upload/androidpublisher/v3/applications/packageName/edits/editId/listings/language/imageType?uploadType=media
ส่วนหัว HTTP ที่จะใช้เมื่อส่งคำขออัปโหลดอย่างง่ายประกอบด้วย:
Content-Type
ตั้งค่าเป็นประเภทข้อมูลอัปโหลดสื่อที่ยอมรับของวิธีการ 1 ประเภท ซึ่งระบุในการอ้างอิง APIContent-Length
กำหนดจำนวนไบต์ที่คุณกำลังอัปโหลด แต่ไม่จำเป็นต้องระบุหากใช้การเข้ารหัสการโอนเป็นกลุ่ม
ตัวอย่าง: การอัปโหลดแบบง่าย
ตัวอย่างต่อไปนี้จะแสดงการใช้คำขออัปโหลดแบบง่ายสำหรับ API สำหรับนักพัฒนาซอฟต์แวร์ Google Play
POST /upload/androidpublisher/v3/applications/packageName/edits/editId/listings/language/imageType?uploadType=media HTTP/1.1 Host: www.googleapis.com Content-Type: image/png Content-Length: number_of_bytes_in_file Authorization: Bearer your_auth_token PNG data
หากคำขอสำเร็จ เซิร์ฟเวอร์จะส่งคืนรหัสสถานะ HTTP 200 OK
พร้อมกับข้อมูลเมตาดังนี้
HTTP/1.1 200 Content-Type: application/json {
"image": {
"id": string,
"url": string,
"sha1": string
}
}
การอัปโหลดหลายส่วน
หากคุณมีข้อมูลเมตาที่ต้องการส่งพร้อมกับข้อมูลที่จะอัปโหลด คุณส่งคำขอ multipart/related
รายการเดียวได้ ซึ่งเป็นตัวเลือกที่ดีหากข้อมูลที่คุณส่งมีขนาดเล็กพอที่จะอัปโหลดอีกครั้งได้ หากการเชื่อมต่อล้มเหลว
หากต้องการใช้การอัปโหลดหลายส่วน ให้ส่งคำขอ POST
หรือ PUT
ไปยัง URI /upload ของเมธอด และเพิ่มพารามิเตอร์การค้นหา
uploadType=multipart
เช่น
POST https://www.googleapis.com/upload/androidpublisher/v3/applications/packageName/edits/editId/listings/language/imageType?uploadType=multipart
ส่วนหัว HTTP ระดับบนสุดที่จะใช้เมื่อส่งคำขออัปโหลดที่มีหลายส่วนมีดังนี้
Content-Type
ตั้งค่าเป็น "หลายส่วน/เกี่ยวข้อง" และรวมสตริงขอบเขตที่ใช้เพื่อระบุส่วนต่างๆ ของคำขอContent-Length
ตั้งค่าเป็นจำนวนไบต์ทั้งหมดในเนื้อความของคำขอ สื่อของคำขอต้องเล็กกว่าขนาดไฟล์สูงสุดที่ระบุไว้สำหรับวิธีนี้
เนื้อหาของคำขอมีรูปแบบเป็นเนื้อหา multipart/related
ประเภท [RFC2387] และมี 2 ส่วนเท่านั้น ส่วนต่างๆ จะระบุด้วยสตริงขอบเขต และตามด้วยขีดกลาง 2 ตัวตามด้วยสตริงขอบเขตสุดท้าย
แต่ละส่วนของคำขอที่มีหลายส่วนต้องมีส่วนหัว Content-Type
เพิ่มเติม:
- ส่วนข้อมูลเมตา: ต้องมาก่อนและ
Content-Type
ต้องตรงกับรูปแบบข้อมูลเมตาที่ยอมรับรูปแบบใดรูปแบบหนึ่ง - ส่วนสื่อ: ต้องมาก่อนลำดับที่ 2 และ
Content-Type
ต้องตรงกับประเภท MIME ของสื่อที่ยอมรับวิธีหนึ่ง
โปรดดูข้อมูลอ้างอิง API สำหรับรายการประเภท MIME ของสื่อที่ยอมรับและขีดจำกัดขนาดของไฟล์ที่อัปโหลดแต่ละวิธี
หมายเหตุ: หากต้องการสร้างหรืออัปเดตส่วนข้อมูลเมตา
เพียงส่งคำขอ POST
หรือ PUT
ไปยังปลายทางทรัพยากรมาตรฐาน โดยไม่ต้องอัปโหลดข้อมูลที่เกี่ยวข้องเท่านั้น
https://www.googleapis.com/androidpublisher/v3/applications/packageName/edits/editId/listings/language/imageType
ตัวอย่าง: การอัปโหลดหลายส่วน
ตัวอย่างด้านล่างแสดงคำขออัปโหลดที่มีหลายส่วนสำหรับ Google Play Developer API
POST /upload/androidpublisher/v3/applications/packageName/edits/editId/listings/language/imageType?uploadType=multipart HTTP/1.1 Host: www.googleapis.com Authorization: Bearer your_auth_token Content-Type: multipart/related; boundary=foo_bar_baz Content-Length: number_of_bytes_in_entire_request_body --foo_bar_baz Content-Type: application/json; charset=UTF-8 {
"image": {
"id": string,
"url": string,
"sha1": string
}
} --foo_bar_baz Content-Type: image/png PNG data --foo_bar_baz--
หากคำขอสำเร็จ เซิร์ฟเวอร์จะส่งคืนรหัสสถานะ HTTP 200 OK
พร้อมกับข้อมูลเมตาดังนี้
HTTP/1.1 200 Content-Type: application/json {
"image": {
"id": string,
"url": string,
"sha1": string
}
}
อัปโหลดต่อได้
หากต้องการอัปโหลดไฟล์ข้อมูลอย่างเสถียรมากขึ้น คุณสามารถใช้โปรโตคอลการอัปโหลดที่ทำงานต่อได้ โปรโตคอลนี้จะช่วยให้คุณดำเนินการอัปโหลดต่อหลังจากที่การสื่อสารล้มเหลวได้ขัดจังหวะการส่งข้อมูล ซึ่งจะเป็นประโยชน์อย่างยิ่งหากคุณกำลังโอนไฟล์ขนาดใหญ่และมีโอกาสที่จะเกิดการหยุดชะงักของเครือข่ายหรือการถ่ายโอนอื่นๆ ที่ไม่สำเร็จ เช่น เมื่ออัปโหลดจากแอปไคลเอ็นต์บนอุปกรณ์เคลื่อนที่ นอกจากนี้ยังช่วยลดการใช้แบนด์วิดท์ในกรณีที่เครือข่ายล้มเหลว เนื่องจากคุณไม่ต้องรีสตาร์ทการอัปโหลดไฟล์ขนาดใหญ่ตั้งแต่ต้น
ขั้นตอนสำหรับการอัปโหลดที่ดำเนินการต่อได้มีดังนี้
- เริ่มเซสชันที่กลับมาทำงานต่อได้ ส่งคำขอเริ่มต้นไปยัง URI การอัปโหลดที่มีข้อมูลเมตา หากมี
- บันทึก URI ของเซสชันที่เรียกใช้ต่อได้ บันทึก URI ของเซสชันที่ส่งคืนในการตอบกลับคำขอเริ่มต้น เพราะคุณจะใช้สำหรับคำขอที่เหลือในเซสชันนี้
- อัปโหลดไฟล์ ส่งไฟล์สื่อไปยัง URI เซสชันที่ดำเนินการต่อได้
นอกจากนี้ แอปที่ใช้การอัปโหลดต่อได้จะต้องมีโค้ดเพื่อกลับมาอัปโหลดที่หยุดชะงักอีกครั้ง หากการอัปโหลดขัดข้อง ให้ดูปริมาณข้อมูลที่ได้รับสำเร็จ แล้วอัปโหลดต่อโดยเริ่มจากจุดนั้น
หมายเหตุ: URI การอัปโหลดจะหมดอายุหลังจากผ่านไป 1 สัปดาห์
ขั้นตอนที่ 1: เริ่มเซสชันที่กลับมาทำงานต่อได้
หากต้องการเริ่มการอัปโหลดที่ดำเนินการต่อได้ ให้ส่งคำขอ POST
หรือ PUT
ไปยัง URI /upload ของเมธอด แล้วเพิ่มพารามิเตอร์การค้นหา
uploadType=resumable
เช่น
POST https://www.googleapis.com/upload/androidpublisher/v3/applications/packageName/edits/editId/listings/language/imageType?uploadType=resumable
สำหรับคำขอเริ่มต้นนี้ เนื้อหาว่างเปล่าหรือมีข้อมูลเมตาเท่านั้น คุณจะต้องโอนเนื้อหาจริงของไฟล์ที่คุณต้องการอัปโหลดในคำขอที่ตามมา
ใช้ส่วนหัว HTTP ต่อไปนี้กับคำขอเริ่มต้นX-Upload-Content-Type
ตั้งค่าเป็นประเภท MIME ของสื่อของข้อมูลการอัปโหลดที่จะโอนในคำขอต่อๆ มาX-Upload-Content-Length
กำหนดจำนวนไบต์ของข้อมูลการอัปโหลดที่จะโอนในคำขอที่ตามมา หากไม่ทราบความยาว ณ เวลาที่ส่งคำขอนี้ ก็ละเว้นส่วนหัวนี้ได้- หากระบุข้อมูลเมตา:
Content-Type
ตั้งค่าตามประเภทข้อมูลของข้อมูลเมตา Content-Length
กำหนดเป็นจำนวนไบต์ที่ให้ไว้ในส่วนเนื้อหาของคำขอเริ่มต้นนี้ แต่ไม่จำเป็นต้องระบุหากใช้การเข้ารหัสการโอนเป็นกลุ่ม
โปรดดูข้อมูลอ้างอิง API สำหรับรายการประเภท MIME ของสื่อที่ยอมรับและขีดจำกัดขนาดของไฟล์ที่อัปโหลดแต่ละวิธี
ตัวอย่าง: คำขอเริ่มเซสชันที่ดำเนินการต่อได้
ตัวอย่างต่อไปนี้แสดงวิธีเริ่มต้นเซสชันที่กลับมาทำงานอีกครั้งสําหรับ API สำหรับนักพัฒนาซอฟต์แวร์ Google Play
POST /upload/androidpublisher/v3/applications/packageName/edits/editId/listings/language/imageType?uploadType=resumable HTTP/1.1 Host: www.googleapis.com Authorization: Bearer your_auth_token Content-Length: 38 Content-Type: application/json; charset=UTF-8 X-Upload-Content-Type: image/png X-Upload-Content-Length: 2000000 {
"image": {
"id": string,
"url": string,
"sha1": string
}
}
หมายเหตุ: สำหรับคำขออัปเดตเริ่มต้นที่ดำเนินการต่อได้โดยไม่มีข้อมูลเมตา ให้เว้นเนื้อหาของคำขอว่างไว้ แล้วตั้งค่าส่วนหัว Content-Length
เป็น 0
ส่วนถัดไปจะอธิบายถึงวิธีจัดการคำตอบ
ขั้นตอนที่ 2: บันทึก URI ของเซสชันที่ดำเนินการต่อได้
หากคำขอเริ่มเซสชันสำเร็จ เซิร์ฟเวอร์ API จะตอบสนองด้วยรหัสสถานะ HTTP 200 OK
นอกจากนี้จะมีส่วนหัว Location
ที่ระบุ URI ของเซสชันที่เรียกได้ว่าดำเนินการต่อได้ ส่วนหัว Location
ที่แสดงในตัวอย่างด้านล่างมีส่วนพารามิเตอร์การค้นหาของ upload_id
ที่ให้รหัสการอัปโหลดที่ไม่ซ้ำกันซึ่งใช้กับเซสชันนี้
ตัวอย่าง: การตอบกลับการเริ่มต้นเซสชันที่ดำเนินการต่อได้
การตอบกลับคำขอในขั้นตอนที่ 1 มีดังนี้
HTTP/1.1 200 OK Location: https://www.googleapis.com/upload/androidpublisher/v3/applications/packageName/edits/editId/listings/language/imageType?uploadType=resumable&upload_id=xa298sd_sdlkj2 Content-Length: 0
ค่าของส่วนหัว Location
ดังที่แสดงในการตอบกลับตัวอย่างด้านบนคือ URI ของเซสชันที่คุณจะใช้เป็นปลายทาง HTTP เพื่ออัปโหลดไฟล์จริงหรือค้นหาสถานะการอัปโหลด
คัดลอกและบันทึก URI ของเซสชันเพื่อให้ใช้สำหรับคำขอที่ตามมาได้
ขั้นตอนที่ 3: อัปโหลด
หากต้องการอัปโหลดไฟล์ ให้ส่งคำขอ PUT
ไปยัง URI การอัปโหลดที่คุณได้รับในขั้นตอนก่อนหน้า รูปแบบของคำขออัปโหลดคือ
PUT session_uri
ส่วนหัว HTTP ที่จะใช้เมื่อส่งคำขออัปโหลดไฟล์ที่ดำเนินการต่อได้มี Content-Length
ตั้งค่านี้ตามจำนวนไบต์ที่คุณอัปโหลดในคำขอนี้ ซึ่งโดยทั่วไปจะเป็นขนาดไฟล์อัปโหลด
ตัวอย่าง: คำขออัปโหลดไฟล์ที่กลับมาทำงานต่อได้
นี่คือคำขอที่ดำเนินการต่อได้เพื่ออัปโหลดไฟล์ PNG ทั้ง 2,000,000 ไบต์สำหรับตัวอย่างปัจจุบัน
PUT https://www.googleapis.com/upload/androidpublisher/v3/applications/packageName/edits/editId/listings/language/imageType?uploadType=resumable&upload_id=xa298sd_sdlkj2 HTTP/1.1 Content-Length: 2000000 Content-Type: image/png bytes 0-1999999
หากคำขอประสบความสำเร็จ เซิร์ฟเวอร์จะตอบสนองด้วย HTTP 201 Created
พร้อมด้วยข้อมูลเมตาที่เชื่อมโยงกับทรัพยากรนี้ หากคำขอแรกของเซสชันที่ดำเนินการต่อได้คือ PUT
ให้อัปเดตทรัพยากรที่มีอยู่ การตอบกลับว่าสำเร็จจะเป็น 200 OK
พร้อมกับข้อมูลเมตาที่เชื่อมโยงกับทรัพยากรนี้
หากคำขออัปโหลดถูกขัดจังหวะ หรือหากคุณได้รับการตอบกลับ HTTP 503 Service Unavailable
หรือ 5xx
อื่นๆ จากเซิร์ฟเวอร์ ให้ทำตามขั้นตอนที่ระบุไว้ในทำให้การอัปโหลดที่หยุดชะงักกลับมาทำงานอีกครั้ง
อัปโหลดไฟล์เป็นส่วนๆ
เมื่ออัปโหลดต่อได้ คุณจะสามารถแบ่งไฟล์ออกเป็นส่วนๆ และส่งคำขอเป็นชุดเพื่ออัปโหลดแต่ละส่วนตามลำดับ แต่นี่ไม่ใช่วิธีการที่แนะนำเนื่องจากมีค่าใช้จ่ายด้านประสิทธิภาพที่เกี่ยวข้องกับคำขอเพิ่มเติม และโดยทั่วไปแล้วก็ไม่จำเป็น อย่างไรก็ตาม คุณอาจต้องใช้การแบ่งข้อมูลเพื่อลดปริมาณการโอนข้อมูลในคำขอหนึ่งๆ ฟังก์ชันนี้มีประโยชน์เมื่อมีการจำกัดเวลาที่แน่นอนสำหรับคำขอแต่ละรายการ ดังเช่นจริงสำหรับคำขอ Google App Engine บางคลาส นอกจากนี้ยังช่วยให้คุณทำสิ่งต่างๆ ได้ เช่น ระบุตัวบ่งชี้ความคืบหน้าในการอัปโหลดสำหรับเบราว์เซอร์เดิมที่ไม่รองรับความคืบหน้าในการอัปโหลดโดยค่าเริ่มต้น
ดำเนินการอัปโหลดที่หยุดชะงักต่อ
หากคำขออัปโหลดถูกยกเลิกก่อนที่จะได้รับการตอบกลับ หรือหากคุณได้รับการตอบกลับ HTTP 503 Service Unavailable
จากเซิร์ฟเวอร์ คุณจะต้องดำเนินการอัปโหลดที่หยุดชะงักอีกครั้ง หากต้องการทำสิ่งต่อไปนี้
- สถานะคำขอ ค้นหาสถานะปัจจุบันของการอัปโหลดโดยส่งคำขอ
PUT
ที่ว่างเปล่าไปยัง URI การอัปโหลด สำหรับคำขอนี้ ส่วนหัว HTTP ควรมีส่วนหัวContent-Range
ที่ระบุว่าไม่ทราบตำแหน่งปัจจุบันในไฟล์ เช่น ตั้งค่าContent-Range
เป็น*/2000000
หากความยาวไฟล์รวมคือ 2,000,000 หากไม่ทราบขนาดเต็ม ให้ตั้งค่าContent-Range
เป็น*/*
หมายเหตุ: คุณสามารถขอสถานะระหว่างกลุ่มได้ ไม่ใช่เฉพาะกรณีที่การอัปโหลดหยุดชะงักเท่านั้น ซึ่งจะเป็นประโยชน์ในกรณีต่างๆ เช่น หากคุณต้องการแสดงตัวบ่งชี้ความคืบหน้าในการอัปโหลดสำหรับเบราว์เซอร์เดิม
- รับจำนวนไบต์ที่อัปโหลด ประมวลผลคำตอบจากการค้นหาสถานะ เซิร์ฟเวอร์ใช้ส่วนหัว
Range
ในการตอบกลับเพื่อระบุไบต์ที่ได้รับจนถึงตอนนี้ ตัวอย่างเช่น ส่วนหัวRange
ของ0-299999
ระบุว่าได้รับไฟล์ 300,000 ไบต์แรกแล้ว - อัปโหลดข้อมูลที่เหลือ สุดท้ายนี้ ตอนนี้คุณก็ทราบแล้วว่าจะดำเนินการกับคำขอต่อได้ที่ใด ลองส่งข้อมูลที่เหลือหรือกลุ่มปัจจุบัน โปรดทราบว่าคุณต้องจัดการข้อมูลที่เหลือแยกเป็นส่วนๆ ในทั้ง 2 กรณี คุณจึงต้องส่งส่วนหัว
Content-Range
เมื่อกลับมาอัปโหลดต่อ
ตัวอย่าง: การอัปโหลดที่หยุดชะงักต่อ
1) ขอสถานะการอัปโหลด
คำขอต่อไปนี้ใช้ส่วนหัว Content-Range
เพื่อระบุว่าไม่ทราบตำแหน่งปัจจุบันในไฟล์ขนาด 2,000,000 ไบต์
PUT {session_uri} HTTP/1.1 Content-Length: 0 Content-Range: bytes */2000000
2) ดึงจำนวนไบต์ที่อัปโหลดไว้จากคำตอบ
การตอบกลับของเซิร์ฟเวอร์ใช้ส่วนหัว Range
เพื่อระบุว่าได้รับไฟล์ 43 ไบต์แรกของไฟล์แล้ว ใช้ค่าด้านบนของส่วนหัว Range
เพื่อกำหนดตำแหน่งที่จะเริ่มการอัปโหลดต่อ
HTTP/1.1 308 Resume Incomplete Content-Length: 0 Range: 0-42
หมายเหตุ: การตอบกลับสถานะอาจเป็น 201 Created
หรือ 200 OK
หากการอัปโหลดเสร็จสมบูรณ์ ปัญหานี้อาจเกิดขึ้นหากการเชื่อมต่อขัดข้องหลังจากที่อัปโหลดไบต์ทั้งหมดแล้ว แต่ก่อนที่ไคลเอ็นต์จะได้รับการตอบกลับจากเซิร์ฟเวอร์
3) อัปโหลดต่อจากที่หยุดไว้
คำขอต่อไปนี้จะดำเนินการอัปโหลดต่อโดยการส่งไบต์ที่เหลือของไฟล์ โดยเริ่มต้นที่ไบต์ 43
PUT {session_uri} HTTP/1.1 Content-Length: 1999957 Content-Range: bytes 43-1999999/2000000 bytes 43-1999999
แนวทางปฏิบัติแนะนำ
เมื่ออัปโหลดสื่อ คุณควรตระหนักถึงแนวทางปฏิบัติแนะนำบางอย่างที่เกี่ยวข้องกับการจัดการข้อผิดพลาด
- อัปโหลดต่อหรือลองอัปโหลดอีกครั้งที่ไม่สำเร็จเนื่องจากการเชื่อมต่อขัดข้องหรือข้อผิดพลาด
5xx
รายการ ซึ่งรวมถึง500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
- ใช้กลยุทธ์ Exponential Backoff หากเกิดข้อผิดพลาดเกี่ยวกับเซิร์ฟเวอร์
5xx
เมื่อกลับมาดำเนินการกับคำขออัปโหลดต่อหรือลองอัปโหลดอีกครั้ง ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นได้หากเซิร์ฟเวอร์ทำงานหนักเกินไป Exponential Backoff ช่วยลดปัญหาเหล่านี้ในช่วงที่มีคำขอเป็นจำนวนมากหรือมีการรับส่งข้อมูลในเครือข่ายปริมาณมาก - คำขอประเภทอื่นๆ ไม่ควรจัดการด้วย Exponential Backoff แต่คุณยังคงลองส่งคำขอได้อีกหลายรายการ เมื่อพยายามส่งคำขอเหล่านี้ซ้ำ ให้จำกัดจำนวนครั้งในการส่งคำขอซ้ำ เช่น รหัสของคุณอาจจำกัดจำนวนการลองใหม่ไม่เกิน 10 ครั้งก่อนที่จะรายงานข้อผิดพลาด
- จัดการข้อผิดพลาด
404 Not Found
และ410 Gone
เมื่ออัปโหลดต่อได้โดยเริ่มอัปโหลดทั้งหมดตั้งแต่ต้น
Exponential Backoff
Exponential Backoff เป็นกลยุทธ์การจัดการข้อผิดพลาดมาตรฐานสำหรับแอปพลิเคชันเครือข่ายที่ไคลเอ็นต์ส่งคำขอที่ไม่สำเร็จซ้ำเป็นระยะๆ เมื่อเวลาผ่านไป หากคำขอจำนวนมากหรือปริมาณการรับส่งข้อมูลในเครือข่ายจำนวนมากทำให้เซิร์ฟเวอร์แสดงผลข้อผิดพลาด การใช้ Exponential Backoff อาจเป็นกลยุทธ์ที่ดีในการจัดการข้อผิดพลาดเหล่านั้น ในทางกลับกัน วิธีนี้ไม่ใช่กลยุทธ์ที่เกี่ยวข้องในการจัดการกับข้อผิดพลาดที่ไม่เกี่ยวข้องกับปริมาณของเครือข่ายหรือเวลาในการตอบสนอง เช่น ข้อมูลเข้าสู่ระบบการให้สิทธิ์ไม่ถูกต้องหรือข้อผิดพลาดไฟล์ไม่พบ
ใช้งานอย่างเหมาะสม Exponential Backoff จะเพิ่มประสิทธิภาพในการใช้แบนด์วิดท์ ลดจำนวนคำขอที่ต้องใช้เพื่อให้การตอบสนองประสบความสำเร็จ และเพิ่มอัตราการส่งข้อมูลของคำขอในสภาพแวดล้อมที่เกิดขึ้นพร้อมกันให้ได้สูงสุด
ขั้นตอนในการใช้งาน Exponential Backoff อย่างง่ายมีดังนี้
- ส่งคำขอไปยัง API
- ได้รับการตอบกลับ
HTTP 503
ซึ่งบ่งชี้ว่าคุณควรลองส่งคำขออีกครั้ง - โปรดรอ 1 วินาที + สุ่มตัวเลข_จำนวนมิลลิวินาที แล้วลองส่งคำขออีกครั้ง
- ได้รับการตอบกลับ
HTTP 503
ซึ่งบ่งชี้ว่าคุณควรลองส่งคำขออีกครั้ง - โปรดรอ 2 วินาที + สุ่มตัวเลข_จำนวนมิลลิวินาที แล้วลองส่งคำขออีกครั้ง
- ได้รับการตอบกลับ
HTTP 503
ซึ่งบ่งชี้ว่าคุณควรลองส่งคำขออีกครั้ง - โปรดรอ 4 วินาที + สุ่มตัวเลข_มิลลิวินาที แล้วลองส่งคำขออีกครั้ง
- ได้รับการตอบกลับ
HTTP 503
ซึ่งบ่งชี้ว่าคุณควรลองส่งคำขออีกครั้ง - โปรดรอ 8 วินาที + สุ่มตัวเลข_จำนวนมิลลิวินาที แล้วลองส่งคำขออีกครั้ง
- ได้รับการตอบกลับ
HTTP 503
ซึ่งบ่งชี้ว่าคุณควรลองส่งคำขออีกครั้ง - โปรดรอ 16 วินาที + สุ่มตัวเลข_มิลลิวินาที แล้วลองส่งคำขออีกครั้ง
- หยุด รายงานหรือบันทึกข้อผิดพลาด
ในขั้นตอนด้านบน สุ่มตัวเลข_จำนวน_มิลลิวินาที คือจำนวนมิลลิวินาทีแบบสุ่มที่น้อยกว่าหรือเท่ากับ 1000 ซึ่งเป็นสิ่งจำเป็น เนื่องจากการหน่วงเวลาแบบสุ่มเล็กน้อยจะช่วยกระจายภาระงานอย่างสม่ำเสมอมากขึ้นและหลีกเลี่ยงการประทับใจเซิร์ฟเวอร์ ต้องกำหนดค่าใหม่หลังจากการรอแต่ละครั้ง จะต้องระบุค่า partner_number_milliseconds
หมายเหตุ: การรอจะมีค่าเป็น (2 ^ n) + sample_number_milliseconds โดยที่ n คือจำนวนเต็มที่เพิ่มขึ้นแบบโมโนนิกซึ่งตอนแรกเริ่มเป็น 0 จำนวนเต็ม n จะเพิ่มขึ้น 1 ครั้งต่อการทำซ้ำแต่ละครั้ง (คำขอแต่ละรายการ)
อัลกอริทึมจะถูกตั้งค่าให้สิ้นสุดเมื่อ n เท่ากับ 5 เพดานนี้จะป้องกันไม่ให้ไคลเอ็นต์ลองซ้ำไปเรื่อยๆ และทำให้เกิดความล่าช้ารวมอยู่ที่ประมาณ 32 วินาทีก่อนที่คำขอจะถือว่าเป็น "ข้อผิดพลาดที่ไม่สามารถกู้คืนได้" ทั้งนี้ คุณจะลองส่งซ้ำได้ไม่เกินจำนวนครั้งที่กำหนด โดยเฉพาะหากการอัปโหลดที่ใช้เวลานาน อย่าลืมจำกัดการหน่วงเวลาลองอีกครั้งในระดับที่สมเหตุสมผล เช่น น้อยกว่า 1 นาที