เมธอด API บางรายการจะทำงานที่ซับซ้อนซึ่งอาจใช้เวลามากกว่า 2-3 วินาทีจึงจะเสร็จสมบูรณ์ คำขอเหล่านี้อาจใช้เวลานานกว่าที่ค่าเริ่มต้นอนุญาต ซึ่งอาจทำให้เกิด ข้อผิดพลาดใน API หรือฝั่งไคลเอ็นต์ ต่อไปนี้คือวิธีหลีกเลี่ยงปัญหาที่เกิดจาก เวลาในการตอบสนองของคำขอที่นานขึ้น
เพิ่มการหมดเวลาเริ่มต้นในไลบรารีของไคลเอ็นต์
บางวิธีมักจะตอบสนองด้วยเวลาในการตอบสนองสูง ซึ่งระบุไว้ในหน้าอ้างอิงของเมธอด นอกจากนี้ วิธีอื่นๆ อาจตอบสนองด้วยเวลาในการตอบสนองสูงในบางครั้ง
ไลบรารีของไคลเอ็นต์บางรายการมีขีดจำกัดการหมดเวลาเริ่มต้น ขีดจำกัดเหล่านี้ทำให้เกิดข้อผิดพลาด เมื่อคำขอมีเวลาในการตอบสนองสูง การหมดเวลาเริ่มต้นสำหรับไลบรารีไคลเอ็นต์บางรายการที่รองรับมีดังนี้
- Java: 20 วินาที
- Python: 60 วินาที
- PHP: 60 วินาที
เพิ่มขีดจํากัดเริ่มต้นเหล่านี้เพื่อหลีกเลี่ยงข้อผิดพลาดฝั่งไคลเอ็นต์ วิธีเปลี่ยนระยะหมดเวลาเริ่มต้นสำหรับไลบรารีไคลเอ็นต์มีดังนี้
Java
นำเข้าแหล่งข้อมูลที่จำเป็น
import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestInitializer; import java.io.IOException;สร้างฟังก์ชันสำหรับการตั้งค่าการหมดเวลา HTTP
/** * Adjusts HTTP timeout values used by the provided request initializer. * * @param requestInitializer The {@link HttpRequestInitializer} used to authorize requests. * @param newHttpTimeout The HTTP timeout for requests in seconds. * @return An {@link HttpRequestInitializer} with modified HTTP timeout values. */ private static HttpRequestInitializer setHttpTimeout( final HttpRequestInitializer requestInitializer, final int newHttpTimeout) { return new HttpRequestInitializer() { @Override public void initialize(HttpRequest httpRequest) throws IOException { requestInitializer.initialize(httpRequest); httpRequest.setConnectTimeout(newHttpTimeout * 1_000); httpRequest.setReadTimeout(newHttpTimeout * 1_000); } }; }เรียกใช้ฟังก์ชันเมื่อสร้างไคลเอ็นต์ Display & Video 360 API
// Create authorized API client with non-default timeouts. DisplayVideo service = new DisplayVideo.Builder( credential.getTransport(), credential.getJsonFactory(), setHttpTimeout(credential, http-timeout-in-seconds) ) .setApplicationName("displayvideo-java-installed-app-sample") .build();
Python
นำเข้าโมดูล http ของไลบรารีของไคลเอ็นต์ Google API Python
from googleapiclient import httpอัปเดตค่าคงที่การหมดเวลาเริ่มต้น
http.DEFAULT_HTTP_TIMEOUT_SEC = http-timeout-in-secondsสร้างบริการ API
# Build the API service. service = discovery.build( 'displayvideo', 'v3', discoveryServiceUrl=discovery_url, credentials=credentials)
PHP
ดาวน์โหลดและติดตั้งไลบรารี HTTP ของ Guzzle โดยใช้ Composer
composer require guzzlehttp/guzzle:^7.0สร้างไคลเอ็นต์ HTTP ของ Guzzle โดยกำหนดค่าการหมดเวลา
$httpClient = new \GuzzleHttp\Client(['timeout' => http-timeout-in-seconds]);สร้างไคลเอ็นต์ Google และกำหนดไคลเอ็นต์ HTTP ของ Guzzle
$client = new Google_Client(); $client->setHttpClient($httpClient);
จัดการข้อผิดพลาดการหมดเวลาของ API
ในบางกรณีที่พบไม่บ่อยนัก คำขออาจเกินเวลาหมดของเซิร์ฟเวอร์ที่ 180 วินาที ในกรณีนี้ API จะแสดงข้อผิดพลาด 408 หรือ 504
หากคำขอตอบกลับด้วยรหัสใดรหัสหนึ่งเหล่านี้ ให้ลองส่งคำขออีกครั้งโดยใช้ Exponential Backoff
หากข้อผิดพลาดยังคงอยู่ โปรดติดต่อทีมสนับสนุน API