Një LeetCode në ditë, e mban papunësinë larg
Nëse keni qenë ndonjëherë në kërkim pune për një pozicion zhvilluesi të softuerit, do të kishit hasur në të ashtuquajturat intervista të stilit LeetCode.
Përkundër faktit se shumica prej nesh nuk duhet të "përmbysin një Pemë Binare" në punën tonë aktuale, kështu kryhen shumica e intervistave koduese/teknike në kompanitë e mëdha të teknologjisë si Google dhe Microsoft. Po, edhe tek "unicorns" (përveç Stripe, sepse janë të lezetshëm) dhe startups.
Në këtë postim, unë do të shkruaj për procesin e mendimit se si arrita të ndërtoj dhe vendosa një aplikacion shumë të thjeshtë JavaScript falas me Cloudflare Worker. Nëse thjesht dëshironi të vendosni dhe përdorni aplikacionin vetë, shikoni depon "këtu".
TL;DR
- Si të merrni pyetjen Daily LeetCoding Challenge duke përdorur LeetCode API
- Krijimi i një detyre Todoist duke përdorur Todoist API
- Planifikoni aplikacionin tonë që të funksionojë çdo ditë duke përdorur Cloudflare Worker ScheduledEvent API
- Si të testoni një shkas të Cloudflare Worker Cron në nivel lokal me Miniflare
Deklarata e problemit
Që një vit më parë, jam përpjekur ta bëj zakon të zgjidh sfidën e përditshme LeetCoding (me të cilën jam ende duke luftuar). Duke qenë se po përdor Todoist si mjetin tim kryesor të produktivitetit të zgjedhur, kam një detyrë të përditshme që duket si kjo:
Si një person dembel, të kontrolloj "leetcode.com" sa herë që dua të praktikoj është shumë e mundimshme. Atëherë mendova, pse të mos sinkronizoni Sfidën Daily LeetCoding me Todoistin tim çdo ditë?
Kërkesat
Le të fillojmë duke përcaktuar se çfarë dua të bëjë aplikacioni:
- Merrni pyetjen e sfidës së përditshme LeetCoding
- Aftësia për të krijuar një detyrë të re në llogarinë time Todoist
- Sinkronizoni pyetjen e re të sfidës së përditshme LeetCoding në kohë
- Aplikacioni duhet të sinkronizohet në kohë falas çdo ditë
Le të fillojmë!
LeetCode API
Ashtu si çdo person i arsyeshëm do të bënte, gjëja e parë që bëra ishte të bëja disa kërkime. Me kërkime, doja të thoja se fillova të përdor Google për informacion.
Gjëja e parë që bëra ishte që menjëherë të Google për “leetcode API”, duke kërkuar dokumentacionin zyrtar të API-së.
Dokumentacioni zyrtar API
Për habinë time, nuk kishte asnjë dokumentacion zyrtar API të LeetCode në dispozicion. Ndërsa ka disa depo jozyrtare të LeetCode API në GitHub, më mirë të mos përdor asnjë API jozyrtare për shkak të shqetësimeve të besueshmërisë (të mirëmbajtura dobët, të vjetëruara, etj.).
Inspektimi Good Ol' DevTool
Gjëja e dytë që më erdhi menjëherë në mendje ishte të inspektoja kërkesën e rrjetit që po bëhej gjatë vizitës në sitin https://leetcode.com/problemset/all/.
Me këtë, unë isha në gjendje të kuptoja API-në e saktë të thirrur për të kërkuar për Sfidën Daily LeetCoding - u krye.
Këtu është trupi i kërkesës GraphQL:
Ju mund të përdorni komandën curl
më poshtë për ta provuar vetë:
Kodi
Mjaft duke folur, le të fillojmë të shkruajmë një kod që bën pikërisht atë që kemi kaluar:
Detyra "Merr pyetjen e sfidës ditore të LeetCoding" - e kontrolluar.
Todoist API
Ashtu si ajo që bëmë në hapin e mëparshëm, unë munda të gjeja "dokumentacionin zyrtar API për Todoist". Në mënyrë tipike, seksioni i parë që unë gjithmonë kërkoj në dokumentacionin API është seksioni "Autorizimi", veçanërisht kur dëshironi të kryeni operacione të krijimit/përditësimit/fshirjes në një aplikacion.
Me pak fjalë, autorizimi ishte mjaft i drejtpërdrejtë për Todoist:
- "Merrni shenjën tuaj API"
- Sa herë që bëni një kërkesë, bashkëngjitni
Authorization: Bearer xxx-your-todoist-api-token-xxx
në kokën e kërkesës suaj HTTP
Ja një shembull se si do të dukej komanda curl
për të krijuar një detyrë të re në Todoist:
Kodi
Shkrimi i një funksioni që bën atë që thamë është relativisht i lehtë, duket diçka si kjo:
Detyra "Krijoni një detyrë të re në llogarinë time Todoist" - u krye.
Punëtor Cloudflare
Dhe ne jemi në detyrën tonë të vetme përfundimtare – ekzekutimin/automatizimin e 2 detyrave të mësipërme çdo ditë, falas.
Gjëja e parë që më erdhi në mendje ishte puna e Cron. Kështu që, menjëherë fillova të kërkoja zgjidhje falas në internet. Pasi kalova disa orë duke bërë disa detyra shtëpie, hasa në Cloudflare Worker dhe mendova t'i provoja.
Ai funksionon në V8 JavaScript, jo në Node.js
Ky është ndoshta një nga keqkuptimet më të zakonshme "për Cloudflare Worker". Meqenëse mjedisi i punonjësit nuk është në Node.js, shumë paketa (p.sh. npm install some-node-package
) që janë duke ekzekutuar në Node.js thjesht nuk do të funksiononin.
Këshillë: Shikoni paketat dhe bibliotekat e mbështetura këtu.
Me fat për ne, na duhet vetëm të përdorim JavaScript të integruar fetch
API.
Më shumë kod
Fillimi i një projekti Cloudflare Worker është i thjeshtë (referencë), në thelb:
- Instaloni Wrangler CLI duke përdorur
npm install -g @cloudflare/wrangler
- Vraponi
wrangler generate <your-project-name> <worker-template>
- Pika hyrëse është funksioni
addEventListener
. Për rastin tonë të përdorimit, ne do të përdorim API-në ScheduledEvent ku thjesht duhet të ndryshojmë ngjarjen tonë nga"fetch"
në"scheduled"
Le të bashkojmë gjithçka:
Më pas, thjesht do të na duhej të modifikonim wrangler.toml
si më poshtë:
Me cilësimin e mësipërm, punonjësi do të vrapojë çdo ditë në 00:01 UTC dhe do të sinkronizojë Sfidën Ditore të LeetCoding me Todoistin tuaj.
Kjo eshte e gjitha! Kalimi në testim.
Si të testoni punonjësit e Cloudflare në nivel lokal
Për të provuar aktivizuesit Cron në nivel lokal, do të na duhet të instalojmë "Miniflar" CLI. Pas instalimit, mund të drejtoni punonjësin tuaj duke përdorur:
# At terminal 1 miniflare # At terminal 2 curl "http://localhost:8787/.mf/scheduled"
Nëse shihni se është krijuar një detyrë e re në Todoistin tuaj, ju e keni arritur atë!
Vendosja
Asnjë projekt anësor nuk bëhet kurrë pa e pritur atë.
Për të vendosur aplikacionin vetë menjëherë, shikoni "depo projekti" dhe përdorni butonin "Deploy with Workers"". Nëse jeni të interesuar për njohuritë:
- Krijoni një llogari në Cloudflare.
- Shto
TODOIST_API_TOKEN
duke përdorurwrangler secret put TODOIST_API_TOKEN
. Sekretin e shtuar rishtazi mund ta gjeni nënCloudflare Worker
→Settings
→Variables
. Mund të merrni tokenin tuaj të API Todoist këtu. - Opsionale: Kjo kërkohet vetëm për "Veprimet Wrangler". Shtoni
CF_API_TOKEN
në sekretet e depove tuaja GitHub. Ju mund të krijoni shenjën tuaj API nga https://dash.cloudflare.com/profile/api-tokens duke përdorur shablloninEdit Cloudflare Workers
. - Më në fund, për të publikuar çdo ndryshim të ri në Cloudflare Worker, ekzekutoni
wrangler publish
Dhe më në fund mbaruam!
Mendime mbyllëse
Së fundi, ka shumë më tepër që mund të kishim bërë, p.sh.:
- Trajtimi i pyetjeve pa përgjigje nga ditët e mëparshme
- Bërja e aplikacionit të konfigurueshëm/përshtatshëm për përdoruesit
- Shtoni etiketa në detyrën tonë
- Lejimi i përdoruesve për të krijuar një pyetje të rastësishme LeetCode si një detyrë e bazuar në etiketën e pyetjeve
Unë do t'i lë jashtë këto veçori për një ditë tjetër.
Ndërsa ka shumë urrejtje për kodimin e intervistave si të tilla, unë personalisht e shikoj në këtë mënyrë - duke mësuar disa lojëra truri, ndoshta paguheni shumë më tepër, kështu që pse jo? Është me të vërtetë një çështje perspektive. Nëse ju pëlqen t'i bëni ato, kjo është edhe më mirë.
Personalisht, nuk gjej aq shumë gëzim duke bërë pyetjet e LeetCode. Përkundrazi, unë punoj në problemet e LeetCode sikur po ngre pesha në palestër. Ndonëse nuk më pëlqen të ngre peshë, më pëlqen të korr përfitimet e saj.
Kjo është e gjitha për sot. Më tregoni se çfarë po ndërtoni me Cloudflare Worker!
Want to Connect With the Author? This article was originally published at jerrynsh.com