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 për të përgjuar aplikacionin iOS të Reddit, udhëzimet e konfigurimit jepen . aplikacionin Desktop të Requestly 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 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. FeedPostDetailsByIds 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 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. GetTopKarmaSubreddits Fusha e Përmirësimit Ndërsa lexoja API-të për të gjetur llojin e të dhënave që sjell, zbulova se 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. SubredditFeedElements 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: API — Shumë eksperimente kanë emra të veçantë "variante", duke përfshirë opsione si , , , dhe . 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, eksperimenti ka dy variante, dhe , duke testuar potencialisht funksionin bazuar në gjendjen e vërtetimit të përdoruesit. GetAllExperimentVariants enabled variant_1 control_model one_feed_ph_bridge_new_users d2x_avatar_in_comments_loggedin loggedin loggedout API — Eksperimentet përfshijnë , , dhe , 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 GetAllExperimentVariants hybrid_video_rollout_android_v2 active_sales gql_google_maps_integration API — Përgjigja API përmban fusha të ndryshme që detajojnë statusin e llogarisë së përdoruesit, të tilla si , , dhe statusin e moderatorit të përdoruesit. Për më tepër, ai përfshin dhe , të cilat tregojnë nëse një llogari është aktualisht e pezulluar ose e kufizuar GetAccountDetails isSubredditCreationAllowed isNameEditable isPasswordSet suspensionExpiresAt isSuspended 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 (emri i operacionit) 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 në të gjitha rastet që testoi. isEnabled: false 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ë.