این سند برخی از تکنیکهایی را که میتوانید برای بهبود عملکرد برنامه خود استفاده کنید، پوشش میدهد. در برخی موارد، از مثالهایی از APIهای دیگر یا APIهای عمومی برای نشان دادن ایدههای ارائه شده استفاده شده است. با این حال، همین مفاهیم برای Android Over The Air API نیز قابل اجرا هستند.
فشردهسازی با استفاده از gzip
یک راه آسان و راحت برای کاهش پهنای باند مورد نیاز برای هر درخواست، فعال کردن فشردهسازی gzip است. اگرچه این کار به زمان اضافی CPU برای خارج کردن نتایج از حالت فشرده نیاز دارد، اما معمولاً با توجه به هزینههای شبکه، ارزش انجام آن را دارد.
برای دریافت پاسخی که با gzip کدگذاری شده است، باید دو کار انجام دهید: یک هدر Accept-Encoding تنظیم کنید و عامل کاربر خود را طوری تغییر دهید که شامل رشته gzip باشد. در اینجا مثالی از هدرهای HTTP که به درستی شکل گرفتهاند برای فعال کردن فشردهسازی gzip آورده شده است:
Accept-Encoding: gzip User-Agent: my program (gzip)
کار با منابع جزئی
راه دیگر برای بهبود عملکرد فراخوانیهای API شما، ارسال و دریافت فقط بخشی از دادههایی است که به آنها علاقهمند هستید. این به برنامه شما اجازه میدهد از انتقال، تجزیه و ذخیره فیلدهای غیرضروری جلوگیری کند، بنابراین میتواند از منابعی از جمله شبکه، CPU و حافظه به طور کارآمدتری استفاده کند.
دو نوع درخواست جزئی وجود دارد:
- پاسخ جزئی : درخواستی که در آن مشخص میکنید کدام فیلدها در پاسخ گنجانده شوند (از پارامتر درخواست
fieldsاستفاده کنید). - پچ : یک درخواست بهروزرسانی که در آن فقط فیلدهایی را که میخواهید تغییر دهید ارسال میکنید (از فعل
PATCHHTTP استفاده کنید).
جزئیات بیشتر در مورد درخواستهای جزئی در بخشهای بعدی ارائه شده است.
پاسخ جزئی
به طور پیشفرض، سرور پس از پردازش درخواستها، نمایش کامل یک منبع را ارسال میکند. برای عملکرد بهتر، میتوانید از سرور بخواهید که فقط فیلدهایی را که واقعاً به آنها نیاز دارید ارسال کند و در عوض، پاسخی جزئی دریافت کنید.
برای درخواست پاسخ جزئی، از پارامتر درخواست fields برای مشخص کردن فیلدهایی که میخواهید برگردانده شوند استفاده کنید. میتوانید از این پارامتر با هر درخواستی که دادههای پاسخ را برمیگرداند، استفاده کنید.
توجه داشته باشید که پارامتر fields فقط بر دادههای پاسخ تأثیر میگذارد؛ بر دادههایی که باید ارسال کنید، در صورت وجود، تأثیری ندارد. برای کاهش میزان دادههایی که هنگام تغییر منابع ارسال میکنید، از درخواست patch استفاده کنید.
پچ (بهروزرسانی جزئی)
همچنین میتوانید هنگام تغییر منابع از ارسال دادههای غیرضروری خودداری کنید. برای ارسال دادههای بهروزرسانیشده فقط برای فیلدهای خاصی که تغییر میدهید، از فعل HTTP PATCH استفاده کنید. معانی وصله شرح داده شده در این سند متفاوت (و سادهتر) از پیادهسازی قدیمیتر GData از بهروزرسانی جزئی است.
مثال کوتاه زیر نشان میدهد که چگونه استفاده از patch دادههایی را که برای ایجاد یک بهروزرسانی کوچک باید ارسال کنید، به حداقل میرساند.
مثال
مدیریت پاسخ به یک وصله
پس از پردازش یک درخواست وصله معتبر، API یک کد پاسخ HTTP با 200 OK به همراه نمایش کامل منبع اصلاحشده برمیگرداند. اگر ETagها توسط API استفاده شوند، سرور مقادیر ETag را پس از پردازش موفقیتآمیز یک درخواست وصله، بهروزرسانی میکند، درست همانطور که با PUT انجام میدهد.
درخواست وصله، کل نمایش منابع را برمیگرداند، مگر اینکه از پارامتر fields برای کاهش مقدار دادههایی که برمیگرداند استفاده کنید.
اگر درخواست وصله منجر به وضعیت منبع جدیدی شود که از نظر نحوی یا معنایی نامعتبر باشد، سرور کد وضعیت HTTP با کد 400 Bad Request یا 422 Unprocessable Entity را برمیگرداند و وضعیت منبع بدون تغییر باقی میماند. برای مثال، اگر سعی کنید مقدار یک فیلد الزامی را حذف کنید، سرور خطایی را برمیگرداند.
نمادگذاری جایگزین زمانی که فعل PATCH HTTP پشتیبانی نمیشود
اگر فایروال شما درخواستهای HTTP PATCH را مجاز نمیداند، یک درخواست HTTP POST ارسال کنید و هدر override را مطابق شکل زیر روی PATCH تنظیم کنید:
POST https://www.googleapis.com/... X-HTTP-Method-Override: PATCH ...
تفاوت بین پچ و آپدیت
در عمل، وقتی برای یک درخواست بهروزرسانی که از فعل HTTP PUT استفاده میکند، دادهها را ارسال میکنید، فقط باید فیلدهایی را ارسال کنید که اجباری یا اختیاری هستند؛ اگر مقادیری را برای فیلدهایی که توسط سرور تنظیم شدهاند ارسال کنید، آنها نادیده گرفته میشوند. اگرچه این ممکن است راه دیگری برای انجام یک بهروزرسانی جزئی به نظر برسد، اما این رویکرد محدودیتهایی دارد. در بهروزرسانیهایی که از فعل HTTP PUT استفاده میکنند، اگر پارامترهای اجباری را ارائه ندهید، درخواست با شکست مواجه میشود و اگر پارامترهای اختیاری را ارائه ندهید، دادههای تنظیمشده قبلی پاک میشوند.
به همین دلیل استفاده از patch بسیار امنتر است. شما فقط دادههای مربوط به فیلدهایی را که میخواهید تغییر دهید، ارائه میدهید؛ فیلدهایی که حذف میکنید پاک نمیشوند. تنها استثنا برای این قانون در مورد عناصر یا آرایههای تکراری رخ میدهد: اگر همه آنها را حذف کنید، آنها همانطور که هستند باقی میمانند؛ اگر هر یک از آنها را ارائه دهید، کل مجموعه با مجموعهای که شما ارائه میدهید جایگزین میشود.