E gjeta përvojën e aplikacionit iOS të Reddit më të mirë se versioni në internet, kështu që mendova të kontrolloja se si i ngarkon të dhënat kaq shpejt. Këtu është prishja e aplikacionit iOS të Reddit.
Këtu janë disa pika kryesore:
- Ai përdor vërtetimin e bazuar në Token.
- Ai përdor API-të GraphQL për pothuajse gjithçka, nga konfigurimi dhe eksperimentet deri te informacionet e postimit.
- Ai monitoron performancën e sistemit të tij API siç përjetohet nga përdoruesit e tij duke përdorur një API të quajtur w3-raportimi.
- Në shumicën e thirrjeve të GraphQL API vetëm emri i operacionit kalohet pa variabla, unë po supozoj se ata po përdorin programin e mesëm për të abstraguar konfigurimin e variablave nga front-end. Një shërbim mbështetës po plotëson informacionin bazuar në emrin e operacionit.
- Reddit përdor Web Socket për funksionin e komenteve të drejtpërdrejta.
Këtu është përmbysja e detajuar e thirrjeve të API. Kam përdorur aplikacionin Desktop të Requestly për të përgjuar aplikacionin iOS të Reddit, udhëzimet e konfigurimit jepen këtu .
Teknologjia e përdorur
Aplikacioni Reddit është krijuar me
- Aplikacioni iOS i Reddit përdor GraphQL API për të ngarkuar të gjithë përmbajtjen.
- Autentifikimi i bazuar në token përdoret për vërtetimin e përdoruesve.
- Monitorimi i performancës duke raportuar performancën e API në fund të përdoruesit.
- Komentimi i drejtpërdrejtë mbështetet duke përdorur WebSocket.
- Konfigurimi dinamik për të kontrolluar në distancë sjelljen e aplikacionit pa vendosur versione të reja.
- Eksperimentet dinamike për të kontrolluar nga distanca eksperimentet, pa nevojë për vendosje të re për të ndryshuar statusin e një eksperimenti.
UX më i mirë me ngarkim paraprak
Pyetja kryesore që kisha ishte se si aplikacioni po funksionon kaq shpejt u përgjigj pasi kontrollova përgjigjen e FeedPostDetailsByIds API. Ky API thirret në ekranin bazë me ID-të e postimeve të shfaqura dhe vjen me informacione të detajuara që shfaqen pasi klikoni postimin. Ky ngarkim paraprak i postimeve kryesore ndihmoi në shfaqjen e menjëhershme të ekranit të detajeve të postimit pa ndonjë ngarkues.
- Postimet e ngarkimit paraprak shfaqen në furnizim.
- Koha e përgjigjes së API-ve është gjithashtu shumë e shpejtë.
Siguria e API-ve të GraphQL
Pyetjet e GraphQL përbëhen nga të dhënat dhe struktura e përgjigjes së nevojshme. Emri i operacionit është përgjithësisht opsional. Shumica e API-ve të Reddit kanë vetëm emra operacionesh në pyetje dhe variablat janë të disponueshëm vetëm kur ka variabla/filtra në ekran si furnizimi me opsionet e postimit të nxehtë dhe më të fundit.
Kjo u jep më pak kontroll zhvilluesve të frontit për të bërë ndryshime në mënyrë të pavarur, por më shumë kontroll mbi keqpërdorimin e API-ve për të marrë të dhëna të panevojshme pas gjithë API-së së saj që përballet me përdoruesit.
Eksperimente me telekomandë
Ekzekutimi i eksperimenteve në aplikacionet origjinale të iOS është i vështirë dhe ka nevojë për ri-vendosje për të aktivizuar ose çaktivizuar eksperimentet, por Reddit e ka konfiguruar aplikacionin në atë mënyrë që eksperimentet të mund të kontrollohen nga distanca. Të gjitha eksperimentet ngarkohen në një API së bashku me vlerat dhe statuset e tyre. Aplikacioni aktivizon automatikisht variantin e eksperimentit që ka caktuar.
Kontrolli i veçorive të bazuara në flamur
Me kaq shumë përdorues, eksperimente dhe veçori, është më mirë t'i kontrollosh nga distanca. Reddit bën një punë të shkëlqyer për të kontrolluar këto veçori nga distanca.
Në çdo nisje të aplikacionit, ai do të thërrasë një API konfigurimi për të ngarkuar mbi 400 variabla të konfigurimit. Bazuar në këto variabla ai tregon veçori dhe variante të ndryshme të veçorive.
Sekreti i Karmas
API me emrin e operacionit GetTopKarmaSubreddits
merr listën e nënrediteve kryesore me pikë karma të fituara në secilën prej tyre. Kjo API zbulon sa komente dhe karma postimesh kemi fituar nga aktiviteti ynë në çdo nën-reddit. Nuk mund ta gjeja kurrë këtë informacion brenda ndërfaqes së internetit dhe celularit të Reddit.
Fusha e Përmirësimit
Ndërsa lexoja API-të për të gjetur llojin e të dhënave që sjell, zbulova se SubredditFeedElements
API ngarkon furnizimin e nën-reddit-it të zgjedhur, por me çdo postim, ai ka një JSON të mbivendosur me informacion të detajuar nën-reddit. Ky informacion është i tepërt dhe mund të hiqet për të zvogëluar ngarkesën e rrjetit të API-së dhe për të përmirësuar më tej performancën e tij.
Shënim: SubredditFeedElements
API tani është zëvendësuar nga SubredditFeedSdui
API dhe problemi është rregulluar.
Përdor AI për Insights
Unë u përpoqa të përdor ChatGPT për të marrë disa njohuri nga API-të. Kështu krijoi një skedar me të gjitha API-të me kaçurrelat e tyre dhe përgjigjet e tyre në të. E ngarkova këtë skedar në një CustomGPT në mënyrë që të mund të vendos çdo lloj pyetjeje. Ai dha disa njohuri që ishin të dukshme, si lloji i përdorimit të një API dhe strukturën e përgjigjes, por kishte shumë halucinacione, ka shumë të ngjarë për shkak të shumë API-ve ose unë nuk jam ekspert në nxitje. Disa nga njohuritë e dhëna nga AI:
-
GetAllExperimentVariants
API — Shumë eksperimente kanë emra të veçantë "variante", duke përfshirë opsione sienabled
,variant_1
,control_model
, dheone_feed_ph_bridge_new_users
. Ky segmentim sugjeron që Reddit po teston veçori në segmente të veçanta të përdoruesve për të përcaktuar ndikimin e tyre. Për shembull, eksperimentid2x_avatar_in_comments_loggedin
ka dy variante,loggedin
dheloggedout
, duke testuar potencialisht funksionin bazuar në gjendjen e vërtetimit të përdoruesit. -
GetAllExperimentVariants
API — Eksperimentet përfshijnëhybrid_video_rollout_android_v2
,active_sales
, dhegql_google_maps_integration
, të cilat tregojnë për një gamë të gjerë testesh të veçorive që mbulojnë funksionalitetin e videos, vendosjet e reklamave, përmirësimet e ndërfaqes së përdoruesit dhe integrimet e palëve të treta -
GetAccountDetails
API — Përgjigja API përmban fusha të ndryshme që detajojnë statusin e llogarisë së përdoruesit, të tilla siisSubredditCreationAllowed
,isNameEditable
,isPasswordSet
dhe statusin e moderatorit të përdoruesit. Për më tepër, ai përfshinsuspensionExpiresAt
dheisSuspended
, të cilat tregojnë nëse një llogari është aktualisht e pezulluar ose e kufizuar
Lista e API-ve
Ekziston një listë e API-ve GraphQL që kam studiuar për të kuptuar se si funksionon Reddit. Kishte edhe disa API të tjera si vërtetimi, raportimi etj. Unë nuk i përfshiva në këtë listë.
Ekrani | GraphQL API | Përshkrimi |
---|---|---|
Shtëpi | GetAllDynamicConfigs | Ngarkon mbi 400 parametra konfigurimi në bazë të të cilave funksionojnë veçori të ndryshme të aplikacionit. Konfigurimi është në formatin tipik të vlerës së çelësit së bashku me llojin e vlerës që mund të jetë një JSON, float, varg etj. |
| GetAllExperimentVariantet | Kërkesa përmban informacione rreth aplikacionit dhe pajisjes për të caktuar eksperimente të destinuara për pajisjen dhe versionin e aplikacionit. Përgjigja përmban një listë të të gjitha eksperimenteve me ID, Emri i eksperimentit, versioni dhe statusi. |
| GetAccount | Ngarkon të gjitha detajet e përdoruesit të regjistruar. |
| HomeFeedSdui | Ngarkon postimet e para me detaje minimale për t'u shfaqur në faqen kryesore. |
| FeedPostDetailsByIds | Parangarkon postimet duke përdorur ID me të gjitha detajet, në rast se një përdorues klikon në postim. |
| DiscoverBarRecommendations | Zbuloni të dhënat e shiritit. |
| Abonimi UserPremium | Të dhëna në lidhje me abonimin premium të përdoruesit |
| GetUserAdEligibility | Merr përshtatshmërinë për reklamën e përdoruesit dhe çdo preferencë. |
| Numri i distinktivit | Informacion në lidhje me distinktivët e fituar nga përdoruesi. |
| | |
Faqja e Subreddit | SubredditChannels | Ngarkon të gjitha detajet bazë rreth komunitetit si përshkrimi, ikonat, numëruesit, llojet e lejuara të postimeve dhe ngjyrat. |
| SubredditTaksonomyTema | Ngarkon kategorinë e komunitetit dhe një tekst të shfaqur si p.sh. nëse ngarkoj r/softuerin e komunitetit, ai do të tregojë #20 te Software & Apps. |
| IsInvitePending | Siç sugjeron emri, kontrolloni për një ftesë në pritje, por nuk jeni të sigurt se cila ftesë është saktësisht. |
| SubredditChannels | Ngarkon kanalet e bisedës së nën-reddit, kontrollova shumë subreddit por nuk gjeta asnjë. |
| BlockedRedditors | Sjell të dhëna nëse përdoruesi është i bllokuar. |
| GetModerators | Merr listën e modaliteteve. |
| FetchStructuredStyleAndWidgets | Kjo API sjell informacione rreth stilit, rregullave dhe detajeve të komunitetit. |
| Rekomandimet e FetchRelatedCommunity | Ky API sjell komunitete të lidhura. |
| SubredditMuting | Kontrollon nëse sub reddit është i heshtur. |
| SubredditFeedElements | Ngarkon furnizimin e nën-reddit. Ai merr filtrat dhe opsionet e paraqitjes të zgjedhura për nën-reddit. Sjell të gjitha detajet rreth postimeve që do të shfaqen në furnizim. |
| PostInfoByIdComments | Kjo kërkesë ngarkon paraprakisht komentet e postimit të parë. |
| | |
Faqja e postimit | GetCustomEmojis Status | Ky API u thirr me ID-në e nën-reddit dhe ngarkon statusin e emoji-ve të personalizuara në nën-reddit. Nuk është shumë e qartë pse quhet kjo API, por unë e kam parë atë në shumë raste. Përgjigja ishte |
| GetSubredditAchievementFlairsStatus | Ngjashëm me statusin e emoji-t, ai merr id nën-reddit dhe merr një përgjigje si është Enabled: false . Qëllimi i kësaj nuk është i qartë për mua. |
| PostInfoByIdComments | Ky API përdoret për të ngarkuar komentet e postimit duke përdorur ID-në e postimit të kaluar në kërkesë. |
| Reklamat e faqeve të komenteve | Ngarkon reklamën vetëm sipër komenteve. |
| | |
Faqja e profilit | RedditorByName | Ngarkon detajet e profilit të përdoruesit të identifikuar. |
| PostSetSettings | Numri i postimeve për t'u ngarkuar. |
| GetTopKarmaSubreddits | Merrni listën e subreddit-eve kryesore me pikë karma në secilin komunitet, kjo API zbulon se sa komente dhe postime karma kemi fituar nga aktiviteti ynë në çdo nën-reddit. |
| UserProfileFeed | Furnizimi për profilin e përdoruesit që përmban komente dhe postime. |
| UserPublicTrophies | Lista e arritjeve dhe trofeve të fituara nga emri i përdoruesit të kaluar në kërkesë me ID, emrin dhe imazhin që do të shfaqet. |
| TippingProfileMigrated | Detajet rreth profilit të bakshishit, nuk e kanë përdorur shumë këtë veçori. Tregoi bilanc 0 në profilin tim 😄. |
konkluzioni
Do të doja të theksoja disa pika në përfundim të këtij eksperimenti të shkatërrimit.
- API-të e Reddit nuk janë shumë të shpejta, përkundrazi përdorin ngarkimin paraprak për të dhënë një përvojë më të mirë të përdoruesit.
- Puna e API-ve nuk përfundon kurrë, madje edhe inxhinierët e Reddit kanë disa punë për të bërë për ta përmirësuar atë.
- Mbajtja e konfigurimeve të aplikacioneve dhe eksperimenteve në distancë mund të japë një kontroll të mirë mbi përvojën e përdoruesit.
- Inxhinierët e Requestly bënë një punë të shkëlqyeshme në shfaqjen e emrit të operacionit me çdo kërkesë GraphQL, duke e bërë jetën e zhvilluesve shumë më të lehtë.