და Google- ს უპირატესობად უპირატესობად უპირატესობად უპირატესობად უპირატესობად უპირატესობად უპირატესობთ. Google Calendar Secret Engineer Weapon: შეზღუდვა მადლობა წაიკითხვის Fullstack Engineer! რეგისტრაცია უფასოდ მიიღოს ახალი პოსტები და მხარდაჭერა ჩემი მუშაობა. რეგისტრაცია "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 დაცვა მისი პოზიცია, როგორც default calendar მილიარდი რეგულარული ადამიანი. API კლიენტებისთვის, თუმცა, იგივე მარტივი სიცოცხლე ტრაგზოდ რთულია. როგორ ამ სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობრივი სქესობა. პრობლემა: შენარჩუნება მონაცემები in-sync თქვენ აშენებთ Cool Calendar, რომელიც გამოიყენება Cool Calendar. მომხმარებელს დაგეხმარებათ დაიწყოს, თქვენ საშუალებას გაძლევთ გაძლევთ მათი ხელმისაწვდომი Google Calendar. ამისთვის საჭიროა ხელმისაწვდომობა თქვენი მომხმარებლის Google Calendar მონაცემებს. თქვენ ვხედავთ GCal API და იხილეთ ტიპიური მძიმე: “Cool,” თქვენ ფიქრობთ. “I just gotta get the და შემდეგ მიიღეთ ყველა მოვლენები ამ კლიენტში. როდესაც მე უნდა განახლება მოვლენები, მე გამოიყენება Go Go მთავარი პასუხი » calendarId eventId events თქვენ შეგიძლიათ გააკეთოთ ეს ყველა რამდენიმე მარტივი ფუნქციები: ეს მუშაობს! ყველა მოვლენები არის თქვენი DB, და ისინი ასევე გამოჩნდება მომხმარებლის GCal მას შემდეგ, რაც მომხმარებლის განახლება მოვლენას თქვენი UI. GCal აპლიკაცია იწყება, შექმნათ ახალი მოვლენას, რომელიც მოუწოდა "Celebrate at Denny's", და ეძებს თქვენი cannamon roll panncakes. Cool Cal აპლიკაცია ხელმისაწვდომია, მაგრამ ახალი მოვლენები არ გამოჩნდება. თქვენი თბილი კუნთები იღებს, როგორც თქვენ იცით, რომ თქვენ მხოლოდ განახლებული ნახევარი გადაწყვეტილება (CoolCal → GCal). თქვენ ასევე უნდა უზრუნველყოს, რომ GCal ცვლილებები გაფართოება Cool Calendar (GCal → CoolCal). კონფიგურაცია თქვენ იცით, რომ სხვები უკვე შეხვდა ამ გამოყენების შემთხვევაში ადრე, ასე რომ მოგვხედავ GCal API დოკუმენტები. ბედნიერი, თქვენ იპოვებთ გზა, რომელიც გამოიყენება “ » » ეფექტურად სინქრონიზირება რესურსები მიმოხილვა მარტივი, რაც დაგეხმარებათ. თქვენ უბრალოდ უნდა დაამატოთ რამდენიმე დამატებითი ტელეფონი. იმიტომ, რომ თქვენ არ იცით, თუ რამდენად მოვლენები განახლდა, ან როდესაც ისინი იყო, თქვენ იცით, რომ თქვენ უნდა loop მიიღოთ მათ ყველა. გულისხმობს ბედნიეროდ, დოკუმენტები მოიცავს სრული ნომერი ამ Java- ში. იგი ასევე იყენებს Looping სტრატეგიის, რომელიც გაძლევთ გრძნობს სასიამოვნო. do-while რა თქმა უნდა, თქვენ უბრალოდ შეგიძლიათ გადაიხადოთ ეს JavaScript- ში და წავიდეთ. Anger ეს იყო ერთი საათის განმავლობაში, და თქვენ წარმატებით კონვერტაცია snippet JavaScript ფუნქცია, რომელიც გამოიყენება გააუმჯობესეთ თქვენი API. syncGcal() ეს მუშაობს! ყოველდღიურად, როდესაც თქვენ გაქვთ , მომხმარებლის ახალი GCal მონაცემები იზრდება CoolCal. syncGcal() თქვენ გადაწყვიტოს, რომ მოიცავს New York Style Cheesecake თქვენი პრობლემები. როდესაც თქვენ ხართ თქვენი გზა, რამდენიმე კითხვები იწვევს თქვენი მოწინავე მფლობელი... SyncToken არ გაგრძელდება ნებისმიერ ადგილას syncGcal() მუშაობს მხოლოდ მაშინ, როდესაც ავტომატურად მოვუწოდებთ How often should I run syncGcal() ? ყოველ საათის განმავლობაში? ყველა წუთში? Where will I store the token? ადგილობრივი შენარჩუნება ? ეს კოლექცია ? user ახალი კოლექცია ? What happens if the token becomes invalid? შეგვიძლია გაგრძელოთ რეიტინგი? უნდა გააკეთოთ სრული ნომერი backup? რა არის Quota Limits? რა უნდა გააკეთოთ, თუ მომხმარებელი ამ პროცესის დროს ცვლილება გააკეთებს? თქვენ გაფართოდებათ – მონიტორინგიზე, რადგან თქვენ არ გაითვალისწინებთ ამ ნედლეულის შემთხვევაში, მაშინ თქვენი ნედლევაზე, რომ ეს უნდა იყოს. კონტაქტი "მე არ ვარ მხოლოდ - მე შეგვიძლია დაგვიკავშირდეთ დახმარება," თქვენ ვთქვათ თავს, ისევე, როგორც თქვენ პრაქტიკა Therapy. თქვენ დარწმუნებული ხართ, რომ API დოკუმენტებს შეიცავს მეთოდი, რომელიც გამოიყენება რაც თქვენ შეინახეთ. syncResources() ან ეს იქნება გთავაზობთ როგორც მომსახურება? როგორიცაა ზოგიერთი YC კომპანია, რომელიც განიცდიან ყველა თქვენი მონაცემები თქვენთვის. მინიმუმ, იქნება Richard Stallman კვლევარი, რომელიც აქვს MIT რეპო, რომ თქვენ შეგიძლიათ მიუთითოთ Claude. > clone the two-way sync stuff from github.com/stallman-cal. no bugs. დეპრესია ოფიციალური დოკუმენტები მხოლოდ. ყველა YC კომპანიები მშენებლო მენეჯერი. Stallman არ სარგებლობს თქვენი კლიენტების პროგრამა. (ეს არის MIT პროექტი, რომელიც მოუწოდა , მაგრამ მას აქვს მხოლოდ 200 სტრუქტურა. არ არის საიმედო.) Compass გრაფიკი ვინმეს არ სარგებლობენ თქვენი ორიგინალური სინქრონიკის ფუნქციონირება. რა თქმა უნდა, თქვენ ნამდვილად ყველა ერთი. ერთი წნევა წავიდება თქვენი მექანიკური keyboard, როდესაც თქვენ აღიარებთ, რომ თქვენ არ იქნება Denny's დღეს. კონტაქტი მას შემდეგ, რაც სახელწოდებული საფრანგეთის toast და პოსტიprandial წასვლა, თქვენ შეესაბამება თქვენი დანიშნულების ქმნის, როგორც რეალური ინჟინერი და გააკეთოთ იგი თავს. რამდენიმე კვირის შემდეგ, დასრულდა. მაგრამ თქვენ ჯერ კიდევ ვერ შეწყვიტოს კითხვებს რატომ GCal გააკეთა ეს გზა? “მე უნდა იყოს ეს რთული?” მოთხოვნები თქვენ დააყენებთ Google- ის ფეხსაცმელი, რათა შეუზღუდავი ინჟინერი მოთხოვნებს ფორმაში (სავარაუდოდ ეს არის) პროდუქტის მოთხოვნები Doc გადაწყვეტილება ეს იყო სასიამოვნო, ასე რომ თქვენ დოკუმენტებს გადაწყვეტილებებს, რათა შეესაბამონ ამ მოთხოვნებს, როგორც (სამთავრობო შპს) ტექნიკური დიზაინი Doc ანალიზი საბოლოოდ, თქვენ ხართ კვალიფიკაციები, რომ ვთქვათ, თუ GCal- ის "Give 'em a token" გადაწყვეტილება იყო კარგი. Token Pagination ფუნქციონირება მათ შეუძლიათ შეშფოთოთ კლიენტს, ასე რომ მათ არ უნდა იცოდეთ ყველაფერი (მაგ. მრავალფეროვანი რეპლიკაცია) Opaque tokens protect the client from overwhelm. მიერ კონტროლი, როდესაც tokens დასრულდება, GCal შეუძლია უზრუნველყოს კლიენტებს ყოველთვის ნახოთ გაზარევა დროს incremental sync. Timestamp-based მიმოხილვა არ შეუძლია ამ გარანტიას. Cleanly handles deletions. Google- ს შეუძლია სრულიად შეცვალოს შენახვის backend, sharding სტრატეგიის ან ტოპოლოგია კლიენტების შეუზღუდავი გარეშე. ეს დარწმუნებული იყო, რომ NoSQL (Megastore) to NewSQL (Spanner) ადვილია 2010s ( ) და Easier implementation changes. მაღალი სიზუსტით.com რბილი ეს იმას ნიშნავს, რომ თითოეული დატვირთული შეტყობინება აწარმოებს ახალი დატვირთული დატვირთული დატვირთული დატვირთული დატვირთული დატვირთული დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ დატვირთულ. Push is disconnected from sync. Incremental syncs არ არის თავსებადი და თქვენ უნდა აირჩიოთ ერთი მეთოდი ან სხვა. ეს არის ცუდი ადამიანები, რომლებიც ვფიქრობ დროზე უფრო ადვილად, ვიდრე ტოკი. Some filters are incompatible timeMin timeMax ფაილი ტოქენები ეფექტურია. თუ კლიენტს ჩართულია mid-pagination (და შემდეგ გვერდზე 3 of 7), ისინი უნდა გადაწყვიტოს მთელი სინთრიკაცია. დიდი კლიენტებისთვის, ეს არის დაზიანებული. ალტერნატივა იქნება მგრძნობიარე გვერდზე ტოქენები, რომლებიც გაგრძელებენ სეზონებში, ან შეამოწმეთ სინთრიკაციის პროგნოზი. No partial sync recovery. Alternatives ( და რატომ ისინი არ გამოიყენება) ქვემოთ ხაზი Sync Token + Cursor Pagination მიზნით ეს არის იგივე ნიმუში, რომელიც გამოიყენება Microsoft Graph (delta tokens), Stripe (pagination cursors), და ყველაზე საწარმო API. pragmatic, battle-tested pattern Google აირჩიე იგი, რადგან ეს საშუალებას გაძლევთ შეშფოთოს ინტერიერის მოკლეობა, ხოლო უზრუნველყოფს “მახვეწილი” სინანტიკის სინანტიკის 99% კლიენტების გამოყენების შემთხვევაში. ოპერაციები (გასვლელი წყაროები, CRDTs, OTs) მხოლოდ მნიშვნელობა იქნება, თუ GCal მოითხოვს რეალურ დროში თანამშრომლობა ან ნამდვილი off-line-first P2P სინთარგი. სრული სურათი თუ Google- ს მიზნით GCal- ის ერთად მოდული მოდული, ისინი გთავაზობთ მეტი დოკუმენტები, ვიდეოები და ვიბინარები. არსებობს ლამაზი Developer Advocate, ხარისხის API ფასები და კლიენტების წარმატების გუნდი. მე ვხედავთ ბილბორები SF- ის გარშემო, რომელიც უბრალოდ ამბობს, npm i gcal მაგრამ Google- ის მიზნები GCal- სთან ერთად ნაკლებად ფართოა: >> Don’t annoy regular users so much that they download Apple Calendar. ეს არ არის გაცნობიარე, რომ მოითხოვოთ ძალიან ბევრი უფასო API. ეს არის საოცარი, რომ თქვენ შეგიძლიათ ინტეგრირება GCal პირველი ადგილი GCal აღიარებს მისი პასუხისმგებლობას, როგორც თქვენი პროგრამის ძირითადი ნაწილი, დასაწყისში საიმედოობის უპირატესობა: არა ბევრი ცუდი ხდება. API გააკეთებს, რაც მისი დოკუმენტები ამბობენ, მიუხედავად იმისა, რომ ისინი არ ამბობენ ბევრი. ისინი არ შეუზღუდავი თქვენ შეუზღუდავი შეცდომები Still არ, როდესაც ისინი პირველი ვფიქრობ, "მე ვიცი, მე უბრალოდ ინტეგრირება GCal." there is a gap between the developer’s expectations and reality ამჟამად, განვითარებლის უნდა შეამციროს, რომ სიზუსტით დრო, ეფექტი, და დაკარგვა ინოვანობის. მაგრამ Google შეიძლება შეამციროს ტკივილი, რათა უზრუნველყოს მეტი რესურსები. მაგალითად, დოკუმენტები შეიძლება უზრუნველყოს დამატებითი მიმოხილვა. კოდი ნიმუშები შეიძლება განვითარდეს ღრმა repos-დან დომის პროგრამები. შედარებით, API მარტივი შენარჩუნება იყო სწორი ნაბიჯი. Primitive API- ს შეიძლება უარყოფოს Power მომხმარებელს. მაგრამ თუ ეს არ ეფუძნება UX, მიმოხილვა, შენარჩუნება, ან ბრენდი, მაშინ შენარჩუნეთ მარტივი. Takeaways მწარმოებლები Public Sync API- ის შექმნა Keep it boring: use existing standards ჩვენ ვხედავთ, რომ GCal- ის API- ის შექმნილია კურსიერების პეჯინაციაზე და სინქრონიზაციაზე. მისი მოვლენების მოდელი ასევე შექმნილია დაარსებული სტანდარტებით: CalDAV, iCalendar და RRULEs. ვიდრე გააუმჯობესებული ვერსია, ისინი შეესაბამება ძირითადი. ეს არის დიდი მიზეზი, თუ რატომ არსებობს ბევრი წარმატებული GCal ინტეგრიაციები მას შემდეგ, რაც მათი API გამოქვეყნდა 2006 წელს (მაგალითად, Yahoo). Use cursor pagination when the data is a moving target როდესაც წაიკითხვის დროს ხდება წაიკითხვა, საჭიროა ფართო გვერდები, რათა თავიდან ავიცილოთ duplicates და დაკარგული ხაზები. მაგალითები: Calendars, feeds, audit logs, append-only streams. Use offset pagination when the data is stable თუ მონაცემები სტატისტიკურია და არ აქვს ერთობლივი წერილები, შეგიძლიათ გააკეთოთ მარტივი მიმოხილვა. მაგალითად: Search results with page numbers, admin table for small data. Don’t oversell the API თქვენ იცით, თუ როგორ გრძნობს, რომ აღჭურვილობა დასაწყისში დასრულდეს PR და შემდეგ მოგზაურობა ... მხოლოდ იმისათვის, რომ აღიაროთ, რომ ეს უფრო რთულია, ვიდრე გსურთ და არ იმიტომ, სანამ მომდევნო საწყისი. Google API- ს არ გთავაზობთ ყველაფერს თქვენთვის. საბოლოო პროდუქტი აპირებს API- ს გაყიდვას: გაქვთ თქვენი დრო თქვენი მომხმარებელს თქვენი პროდუქტისთვის, სანამ შეუზღუდავი ხართ, რომ აპირებთ შეუზღუდავი აწარმოებს, რომლებიც შეესაბამება მას. Don’t break things თუ თქვენი ინტეგრირება არის ძირითადი სხვა ადამიანების პროდუქტისთვის, მაშინ წავიდეთ slowly. მიიღეთ მეტი დრო, რათა ტესტირება გადაზიდვა. მიიღეთ მიმოხილვა დოკუმენტების შესახებ, სანამ მათ იწყება. გაგზავნა “head up” ელექტრონული ფოსტები და ტერმინალში შეტყობინებები, ასე რომ ვინმეს არ არის შეუზღუდული. ეს მოითხოვს ინდივიდუალური გადაზიდვა “crackhead vibe coder” რომელიც გაბრძალავს ყველაფერი prod to “პროგერითი პროგრამული ინჟინერი”. თქვენ ყოველთვის არ გაქვთ უფლება, მაგრამ პასუხისმგებლობა მნიშვნელოვანია. ერთი ცვლილება უფრო დიდი ცვლილება გაძლევთ, ვიდრე სამი ფუნქციები კარგი გაძლევთ. GCal API არის სტაბილური, ასე რომ ჩემი Sleep Score ბედნიეროდ არ იღებს მას შემდეგ, რაც მას გამოიყენება. Public Sync API- ის ინტეგრირება Don’t start with an integration "მე არ იყენებთ ჩემი პროგრამა, თუ ეს არ ინტეგრირდება ინსტრუმენტებს, რომლებიც უკვე იყენებენ." "მე არ იყენებთ ჩემი პროგრამა, თუ ეს არ ინტეგრირდება ინსტრუმენტებს, რომლებიც უკვე იყენებენ." ეს შეიძლება იყოს, მაგრამ გთხოვთ, რომ ისინი გითხრათ. ინტეგრირება არის ფასიანი მხარეს კვლევები თქვენი პროდუქტის ბაზარზე ფართო მოგზაურობა. თუ ღირებულება prop არის საკმარისი კარგი, მათ არ იქნება პრობლემა შექმნა ახალი ანგარიშის და დამატება მონაცემები დასაწყისში. Accept that Pareto is right სხვა თქმა უნდა, ბოლო 20 წუთი სამუშაოები მიიღებენ 80 წუთი დრო. ფართო ფართო ფართო ფართო ფართო ფართო ფართო ფართო ფართო ფართო ფართო ფართო ფართო ფართო ფართო ფართო ფართო. Google- ის დოკუმენტები არ არის ერთადერთი, რომელიც განიცდიან, რომ ყველაფერი შეიძლება იყოს მარტივი და უფასო. მათი შეთავაზებები შეზღუდოს retries, idempotency, fallback, delta syncs, offline, token invalidation, quotas და მოთხოვნა (ETags). თქვენ არ უნდა ყველა მათთვის თქვენი MVP, მაგრამ მოთხოვნებთ, რომ ისინი დასრულდება. Simplicity for one party means complexity for another Simple UI და Complex Backend კარგი რეგულარული მომხმარებელს → რთული ენერგეტიკული მომხმარებელს მარტივი ფასი → კომპლექსური R&D მარტივი API → კომპლექსური ინტეგრიაცია შემდეგი დროს, როდესაც თქვენ ფიქრობთ, "მე უბრალოდ გამოიყენებ ამ უფასო API, ეს ხდის მარტივი," იმიტომ, რომ: It’s either free or simple; Someone always pays. ახლა მიიღეთ თქვენი პანკეტები.