میں میں نے گوگل کو اس بات کی تعریف کی ہے کہ وہ جدیدیت کے تعاقب کے لئے ناپسندیدہ طور پر "نہیں" کہتا ہے. گوگل کیلنڈر کے خفیہ انجینئر ہتھیار: محدود پڑھنے کے لئے آپ کا شکریہ Fullstack انجینئر! نئے خطوط حاصل کرنے کے لئے مفت سائن اپ کریں اور میرے کام کی حمایت کریں. دستخط کریں "Use a frontend framework." No. JavaScript. "Use Typescript." No. Javascript. "Use a trendy CSS tool." No. CSS classnames. "Give us a native desktop app." No. Browser. "Give us dark mode." No. "Make it really fast." No. سادگی کے لئے ان کی ذمہ داری نے GCal کو ہزاروں عام لوگوں کے لئے معاوضہ کیلنڈر کے طور پر اس کی پوزیشن کی حفاظت کرنے میں مدد کی ہے. API گاہکوں کے لئے، تاہم، یہ ایک ہی سادہ زندگی کو مشکل طور پر پیچیدہ بناتا ہے. اس پیچیدگی میں کس طرح گڑبڑتا ہے، اور ہم تعمیر کرنے والوں کے طور پر اس سے کیا سیکھ سکتے ہیں. مسئلہ: ڈیٹا In-Sync رکھنے آپ کو ایک اچھا نیا کیلنڈر تعمیر کر رہے ہیں جو Cool Calendar کہا جاتا ہے. صارفین کو شروع کرنے میں مدد کرنے کے لئے، آپ ان کو ان کے موجودہ Google کیلنڈر کو درآمد کرنے کی اجازت دیتے ہیں. یہ آپ کے صارفین کے Google کیلنڈر کے اعداد و شمار تک رسائی کی ضرورت ہوگی. آپ GCal API کو دیکھتے ہیں اور عام شکایات دیکھتے ہیں: “Cool,” آپ سوچتے ہیں. “I just gotta get the ، پھر اس کیلنڈر کے لئے تمام واقعات حاصل کریں. جب مجھے ایک واقعہ کو اپ ڈیٹ کرنے کی ضرورت ہے تو، میں اس کا استعمال کروں گا. حاصل کرنے سے جواب۔‘‘ calendarId eventId events آپ کچھ سادہ افعال کے ساتھ یہ سب کر سکتے ہیں: یہ کام کرتا ہے! تمام واقعات آپ کے ڈی بی میں ہیں، اور وہ بھی آپ کے UI سے ایک صارف کو اپ ڈیٹ کرنے کے بعد صارف کے GCal میں ظاہر ہوتے ہیں. آپ GCal اپلی کیشن کھولیں، "Denny's میں جشن منائیں" نامی ایک نیا واقعہ بنائیں، اور آپ کے سینڈیم رول پینک کے لئے انتظار کر رہے ہیں. Cool Cal اپلی کیشن کھلی ہے، لیکن نئے واقعہ ظاہر نہیں ہوتا ہے. آپ کی خالی شکم گر جائے گا جب آپ کو پتہ چلتا ہے کہ آپ نے صرف نصف حل (CoolCal → GCal) کو لاگو کیا ہے. آپ کو اب بھی اس بات کو یقینی بنانے کی ضرورت ہے کہ GCal تبدیلیوں کو Cool Calendar (GCal → CoolCal) میں پھیلایا جائے. انکار آپ جانتے ہیں کہ دوسروں نے اس سے پہلے اس کا استعمال کیا ہے، لہذا آپ GCal API دستاویزات کو دوبارہ دیکھتے ہیں. خوش قسمتی سے، آپ کو ایک گائیڈ کہا جاتا ہے” ’’ وسائل کو مؤثر طریقے سے سائن اپ کریں ہدایات بہت مختصر ہیں، جو آپ کو آسان بنا دیتا ہے. لگتا ہے کہ آپ کو صرف چند مزید کالز شامل کرنے کی ضرورت ہے. کیونکہ آپ کو معلوم نہیں ہے کہ کتنے واقعات کو اپ ڈیٹ کیا گیا تھا یا جب وہ تھے، آپ جانتے ہیں کہ آپ کو ان سب کو حاصل کرنے کے لئے ایک لنک کی ضرورت ہوگی. سمجھ میں آتا ہے خوش قسمتی سے، دستاویزات میں جاوا میں اس کا ایک مکمل ٹکڑا شامل ہے. یہ بھی استعمال کرتا ہے اسٹوریج، جس سے آپ کو ذہین محسوس ہوتا ہے. do-while یقینی طور پر آپ اسے JavaScript میں تبدیل کرسکتے ہیں اور آگے بڑھ سکتے ہیں. غصہ یہ ایک گھنٹہ تھا، اور آپ نے کامیابی سے ایک جاوا اسکرپٹ فیکٹری کو تبدیل کیا ہے جس کا نام ہے آپ کے API کو اپ ڈیٹ کریں syncGcal() یہ کام کرتا ہے! جب بھی آپ چلتے ہیں ایک صارف کے نئے GCal ڈیٹا کو CoolCal میں شامل کیا جاتا ہے. syncGcal() آپ اپنے مسائل کے لئے نیویارک سٹائل Cheesecake شامل کرنے کا فیصلہ کرتے ہیں. جب آپ اپنے راستے سے باہر ہیں تو، آپ کے تھکا ہوا دماغ میں چند سوالات پیدا ہوتے ہیں ... syncToken کسی بھی جگہ مسلسل نہیں ہے syncGcal() صرف جب دستی طور پر بلایا جاتا ہے تو کام کرتا ہے How often should I run syncGcal() ? ہر گھنٹہ؟ ہر منٹ؟ Where will I store the token? مقامی ذخیرہ کیا ہے؟ کے جمع کیا ہے؟ user ایک نیا مجموعہ؟ What happens if the token becomes invalid? کیا میں ریٹائرمنٹ کر سکتا ہوں؟ کیا مجھے بیک اپ کے طور پر مکمل درآمد کرنے کی ضرورت ہے؟ کرنسی کی حد کے بارے میں کیا؟ اگر ایک صارف اس عمل کے دوران تبدیلی کرتا ہے تو کیا ہوگا؟ آپ غصے میں ہو جاتے ہیں - گائیڈ پر آپ کو ان نجی معاملات کے بارے میں خبردار نہیں کرنے کے لئے، پھر اس بات کا یقین کرنے کے لئے آپ کی ناخوشگوارگی پر. مذاکرات "میں اکیلا نہیں ہوں - میں مدد کے لئے پہنچ سکتا ہوں،" آپ اپنے آپ کو کہتے ہیں، جیسا کہ آپ نے علاج میں عمل کیا تھا. آپ اس بات پر یقین رکھتے ہیں کہ API دستاویزات کو ایک طریقہ ہے جس کا نام جو تم بھول گئے ہو syncResources() یا یہ ایک سروس کے طور پر پیش کیا جائے گا؟ کسی YC کمپنی کی طرح جو آپ کے لئے تمام ڈیٹا سائن اپ کرے گا. کم از کم، ایک ریچارد Stallman شاگرد ہو جائے گا جو ایک MIT ریپو ہے جو آپ کو کلود کو دکھا سکتے ہیں. > clone the two-way sync stuff from github.com/stallman-cal. no bugs. افسردہ سرکاری دستاویزات صرف ہیں. تمام YC کمپنیوں تعمیر ایجنٹ ہیں. Stallman آپ کے منافع بخش کیلنڈر ایپ پر بھروسہ نہیں کرتا. (ایک پروجیکٹ ہے جس کا نام لیکن اس کے پاس صرف 200 ستارے ہیں، قابل اعتماد نہیں ہے.) Compass کی منصوبہ بندی کوئی بھی آپ کی دو طرفہ سنکنرن کی خصوصیات کے بارے میں فکر نہیں کرتا. آپ واقعی سب اکیلے ہیں. آپ کے میکانی ٹیبلڈ پر ایک ٹھنڈا گرتا ہے جب آپ سمجھتے ہیں کہ آپ آج ڈنی کے لئے نہیں جائیں گے. قبولیت گھر سے بنایا فرانسیسی ٹیسٹ اور ایک پیچھے پیچھے پیچھے چلنے کے بعد، آپ کو ایک حقیقی انجینئر کی طرح کام کرنے اور اپنے آپ کو کرنا ہے. چند ہفتوں بعد، یہ آخر میں کیا گیا ہے. لیکن آپ اب بھی حیران رہنے سے روک نہیں سکتے ’’کیا جی جی نے ایسا ہی کیا؟‘‘ ’’کیا یہ پیچیدہ ہونا چاہیے تھا؟‘‘ ضروریات آپ اپنے آپ کو گوگل کے شاخوں میں ڈالتے ہیں کہ آپ کی ضروریات کو دوبارہ انجینئرنگ کرتے ہیں. (پی ڈی اے) مصنوعات کی ضروریات DOC حل کے یہ مزہ تھا، لہذا آپ ان ضروریات کو پورا کرنے کے لئے حل کو دستاویز کرتے ہیں TDD کے تکنیکی ڈیزائن DOC تجزیہ آخر میں، آپ یہ کہہ سکتے ہیں کہ GCal کے "Give 'em a token" حل ایک اچھا تھا. Token Pagination کے اثرات وہ کلائنٹ سے پیچیدگی کو چھپ سکتے ہیں لہذا انہیں سب کچھ سمجھنے کی ضرورت نہیں ہے (مثال کے طور پر متعدد علاقے ریپریشن) Opaque tokens protect the client from overwhelm. ٹوکن کا ختم ہونے کے وقت کنٹرول کرتے ہوئے، GCal کو یقینی بناتا ہے کہ گاہکوں کو بڑھتی ہوئی سنکنرن کے دوران ہمیشہ حذفیاں دیکھیں. Cleanly handles deletions. گوگل کو مکمل طور پر اسٹوریج بیکنڈ، اسٹوریج کی حکمت عملی یا ٹپولوگ کو تبدیل کرنے کے بغیر کلائنٹ پر اثر انداز کیا جا سکتا ہے. یہ یقینی طور پر 2010s میں NoSQL (Megastore) سے NewSQL (Spanner) تک منتقل کرنا آسان بنا دیا ( ) Easier implementation changes. Highscalability.com سے رابطہ کریں کمزوری ویب ہاک آپ کو کچھ بدلتا ہے، لیکن کیا نہیں بتاتا. اس کا مطلب یہ ہے کہ ہر پلس نوٹس ایک نئی بڑھتی ہوئی سنکنرن کال کو روکتا ہے. یہ بات چیت بن جاتا ہے جب بجلی کے صارفین اکثر ٹویٹس کرتے ہیں. کیوں پلس کی کارکردگی کے بوجھ میں ایک ہلکے ڈف شامل نہیں کرتے ہیں، یا کم از کم اس بات کا اشارہ کرتے ہیں کہ کیا ایونٹ ایڈز بدل گئے ہیں؟ Push is disconnected from sync. .Incremental syncs کے ساتھ متوازن نہیں ہیں اور آپ کو ایک طریقہ یا دوسرے کو منتخب کرنے کی ضرورت ہے. یہ انسانوں کے لئے ایک پریشانی ہے، جو وقت کے لحاظ سے ٹوکن میں سے زیادہ آسانی سے سوچتے ہیں. Some filters are incompatible timeMin timeMax صفحہ ٹوکن فیملی ہیں. اگر ایک کلائنٹ میڈ پیجنگ (پہلے صفحہ 3 کے 7 کے بعد) گر جائے تو، وہ پورے سنکنرن کو دوبارہ شروع کرنا پڑے گا. بڑے کیلنڈر کے لئے، یہ دردناک ہے. ایک متبادل طویل مدتی صفحہ ٹوکن ہو جائے گا جو سیشنوں کے درمیان زندہ رہیں، یا سنکنرن کی ترقی کو چیک کریں. No partial sync recovery. متبادل (اور کیوں استعمال نہیں کیا گیا تھا) نیچے کی لائن sync token + cursor pagination کا طریقہ کار ایک یہ ایک ہی نمونہ ہے جو مائیکروسافٹ گراف (ڈلٹا ٹوکن)، Stripe (پائینشن کورسرز) اور زیادہ تر کاروباری APIز کے ذریعہ استعمال ہوتا ہے. pragmatic, battle-tested pattern گوگل نے اسے منتخب کیا کیونکہ یہ ان کو ان کے اندرونی پیچیدگی کو چھپانے کی اجازت دیتا ہے جبکہ 99٪ کیلنڈر کے استعمال کے واقعات کے لئے "بہت اچھا" سینیٹیک فراہم کرتا ہے. اختیارات (انٹوریج سیرنگ، CRDTs، OT) صرف اگر GCal حقیقی وقت تعاون یا حقیقی آف لائن سب سے پہلے P2P سنکنرن کی ضرورت ہوتی ہے تو سمجھ میں آتا ہے. مکمل تصویر اگر گوگل کا مقصد GCal کے ساتھ آمدنی پیدا کرنا تھا تو، وہ زیادہ دستاویزات، ویڈیوز، اور ویب سینئر پیش کریں گے. وہاں ایک خوبصورت ڈویلپر ایڈوکوٹ، درج API قیمتیں، اور ایک کسٹمر کامیابی ٹیم ہو گی. npm i gcal لیکن GCal کے ساتھ گوگل کا مقصد کم مہنگا ہے: >> Don’t annoy regular users so much that they download Apple Calendar. یہ ایک مفت API سے اتنا زیادہ توقع کرنے کے لئے انصاف نہیں ہے. یہ حیرت انگیز ہے کہ آپ سب سے پہلے GCal کے ساتھ ضم کر سکتے ہیں GCal آپ کے ایپ کے بنیادی حصے کے طور پر اپنی ذمہ داری کا احترام کرتا ہے، قابل اعتماد کو اپنانے کی سہولت پر ترجیح دیتے ہوئے: بہت سے ناکامیاں نہیں ہوتی ہیں. API وہی کرتا ہے جو اس کے دستاویزات کہتے ہیں، یہاں تک کہ اگر وہ بہت کچھ نہیں کہتے. وہ آپ کو تباہ کن تبدیلیوں کے ساتھ حیران نہیں کرتے اب بھی، جب وہ پہلی بار سوچتے ہیں، "میں جانتا ہوں، میں صرف GCal کے ساتھ انٹرویو کروں گا." there is a gap between the developer’s expectations and reality فی الحال، ڈویلپر کو وقت، کوشش اور نافرمانی کی کمی کے ساتھ اس کمی کو بند کرنے کی ضرورت ہے. لیکن گوگل زیادہ وسائل فراہم کرکے درد کو کم کر سکتا ہے. مثال کے طور پر، دستاویزات زیادہ اپلی کیشن ہدایات فراہم کرسکتے ہیں. کوڈ نمونوں کو نیچے repos سے ڈیمو ایپلی کیشنز تک ترقی کر سکتے ہیں. توازن پر، API سادہ رکھنے کا صحیح قدم تھا. ایک ابتدائی API توانائی کے صارفین کو پریشان کر سکتا ہے. لیکن اگر یہ UX، آمدنی، بحالی یا برانڈ پر اثر نہیں رکھتا ہے تو، اسے سادہ رکھیں. تعمیر کرنے والوں کے لئے Takeaways Public Sync API کا استعمال کرتے ہوئے Keep it boring: use existing standards ہم نے یہاں دیکھا ہے کہ GCal کے API کو کورسر pagination اور sync tokens پر تعمیر کیا جاتا ہے. Its event model is also built around established standards: CalDAV, iCalendar, and RRULEs. ان کے بہتر ورژن کی تخلیق کرنے کے بجائے، وہ بنیادیات کے ساتھ پکڑتے ہیں.یہ ایک بڑا وجہ ہے کہ 2006 میں ان کے API کے بعد سے بہت سے کامیاب GCal انٹرویوز موجود ہیں (ایہوا کے برعکس). Use cursor pagination when the data is a moving target جب آپ پڑھتے وقت لکھتے ہیں تو، آپ کو دوگنا اور بھاگنے والی لائنوں سے بچنے کے لئے صفحات کے درمیان مطابقت کی ضرورت ہوتی ہے. مثالیں: کیلنڈر، فیڈز، ایڈجسٹنگ لوگز، ایڈجسٹنگ صرف اسٹریمز. Use offset pagination when the data is stable اگر ڈیٹا سٹیٹک ہے اور اس کے ساتھ ساتھ لکھا نہیں ہے تو، آپ ایک سادہ نقطہ نظر کے ساتھ باہر جا سکتے ہیں. مثال: صفحہ نمبر کے ساتھ تلاش کے نتائج، چھوٹے اعداد و شمار کے لئے ایڈمن ٹیبل. Don’t oversell the API آپ جانتے ہیں کہ صبح میں ایک پی آر کو ختم کرنے کے لئے اور پھر ایک سواری کے لئے حوصلہ افزائی کرنے کے لئے یہ کیسے محسوس ہوتا ہے ... صرف یہ سمجھنے کے لئے کہ یہ آپ نے سوچا ہے کہ زیادہ پیچیدہ ہے اور اگلے شام تک دن کی روشنی نہیں دیکھتی ہے. گوگل کی API آپ کے لئے سب کچھ کرنے کا وعدہ نہیں کرتا. آخر کی مصنوعات API فروخت کرے گی: اس کے ساتھ انٹرویو کرنے والے ڈویلپرز کو خوش کرنے کے بارے میں فکر کرنے سے پہلے آپ کے صارفین کو آپ کی مصنوعات کے ساتھ خوش کرنے کا وقت خرچ کریں. Don’t break things اگر آپ کی انضمام کسی اور کی مصنوعات کے لئے بنیادی ہے تو، تو آہستہ آہستہ. زیادہ وقت منتقل کرنے کے لئے ٹیسٹ کریں. انہیں شروع کرنے سے پہلے Docs پر واپسی حاصل کریں. ای میل اور ٹرمینل پیغامات بھیجیں تاکہ کسی کو حیران نہ ہو. یہ ایک شناختی تبدیلی کی ضرورت ہوتی ہے جو "کرک ہیڈ ویب کوڈر" سے "تصدیق شدہ سافٹ ویئر انجینئر" میں چیزوں کو توڑ دیتا ہے. آپ کو ہمیشہ صحیح نہیں ملے گا، لیکن ذمہ داری کو سنجیدگی سے لے لو. ایک خراب تبدیلی تین خصوصیات کو بہتر بنانے کے مقابلے میں زیادہ نقصان پہنچائے گی. GCal کا API مستحکم ہے، لہذا میرے خواب کے سکور خوش قسمتی سے اس کا استعمال کرنے کے بعد سے کم نہیں ہوا ہے. Public Sync API کا استعمال کرتے ہوئے Don’t start with an integration "لیکن میرے صارفین میری اپلی کیشن کا استعمال نہیں کریں گے جب تک کہ وہ اب بھی ان آلات کے ساتھ انٹرویو نہیں کر رہے ہیں جو وہ استعمال کر رہے ہیں." "لیکن میرے صارفین میری اپلی کیشن کا استعمال نہیں کریں گے جب تک کہ وہ اب بھی ان آلات کے ساتھ انٹرویو نہیں کر رہے ہیں جو وہ استعمال کر رہے ہیں." ہو سکتا ہے، لیکن وہ آپ کو یہ بتائیں. ایک انضمام کو شامل کرنا آپ کی مصنوعات کی مارکیٹ میں مناسب سفر میں ایک مہنگی کنارے کی تلاش ہے. اگر قیمت پروپ کافی اچھا ہے تو، وہ ایک نیا اکاؤنٹ تخلیق کرنے اور نیچے سے ڈیٹا شامل کرنے میں کوئی مسئلہ نہیں ہوگا. Accept that Pareto is right دوسرے الفاظ میں، آخری 20٪ کاموں کو 80٪ وقت لگے گا. Edge کیسز اور gotchas کے لئے سطح آپ کو انضمام کے طور پر وسیع ہو جاتا ہے. گوگل کے دستاویزات صرف وہ نہیں ہیں جو آپ کو سوچنے کے لئے حوصلہ افزائی کریں گے کہ چیزیں سادہ اور مفت ہوسکتی ہیں. ان کے وعدوں کو ریٹوریز، idempotency، fallback، delta syncs، offline، token invalidation، quotas، and conditional requests (ETags) پر غور کرتے ہوئے کم کریں. آپ کو اپنے MVP کے لئے ان سب کی ضرورت نہیں ہے، لیکن امید ہے کہ وہ آخر میں آتے ہیں. Simplicity for one party means complexity for another ایک پیچیدہ backend عام صارفین کے لئے اچھا → طاقت کے صارفین کے لئے مشکل سادہ قیمتیں → پیچیدہ R&D سادہ API → پیچیدہ انضمام اگلی بار جب آپ سوچتے ہیں، "میں صرف اس مفت API کا استعمال کروں گا، یہ سادہ لگتا ہے," یاد رکھیں: It’s either free or simple; Someone always pays. اب اپنے پینک کو لے جاؤ.