Zjistil jsem, že aplikace Reddit pro iOS je lepší než webová verze, takže mě napadlo zkontrolovat, jak rychle načítá data. Zde je zrušení aplikace Reddit pro iOS. Zde jsou některé důležité body: Používá autentizaci založenou na tokenech. Využívá rozhraní GraphQL API pro téměř vše od konfigurace a experimentů po zveřejňování informací. Monitoruje výkon svého systému API, jak jej zažívají jeho uživatelé, pomocí rozhraní API s názvem w3-reporting. Ve většině volání GraphQL API je předán pouze název operace bez proměnných, předpokládám, že používají middleware k abstrahování konfigurace proměnných z front-endu. Backendová služba vyplňuje informace na základě názvu operace. Reddit používá Web Socket pro funkci živých komentářů. Zde je podrobný popis volání API. K zachycení aplikace Reddit pro iOS jsem použil , pokyny k nastavení jsou uvedeny . desktopovou aplikaci Requestly zde Použitá technologie Aplikace Reddit je vytvořena pomocí Aplikace Reddit pro iOS používá k načtení veškerého obsahu rozhraní GraphQL API. K ověřování uživatelů se používá autentizace založená na tokenech. Sledování výkonu hlášením výkonu API na straně uživatele. Živé komentování je podporováno pomocí WebSocket. Dynamická konfigurace pro vzdálené ovládání chování aplikace bez nasazování nových verzí. Dynamické experimenty pro vzdálené ovládání experimentů, které nevyžadují nové nasazení ke změně stavu experimentu. Lepší uživatelské rozhraní s preloadingem Hlavní otázka, kterou jsem měl, byla, jak aplikace funguje tak rychle, byla zodpovězena při kontrole odpovědi API. Toto API se volá na domovské obrazovce s ID zobrazených příspěvků a přichází s podrobnými informacemi, které se zobrazí po kliknutí na příspěvek. Toto předběžné načtení horních příspěvků pomohlo k okamžitému zobrazení obrazovky s podrobnostmi příspěvku bez jakéhokoli nakladače. FeedPostDetailsByIds Předběžné načítání příspěvků se zobrazuje ve zdroji. Doba odezvy API je také velmi rychlá. Zabezpečení rozhraní GraphQL API Dotazy GraphQL se skládají z dat a struktury potřebné odpovědi. Název operace je obecně volitelný. Většina rozhraní Reddit API má v dotazech pouze názvy operací a proměnné jsou dostupné pouze tehdy, když jsou na obrazovce proměnné/filtry, jako je zdroj s horkými a nejnovějšími možnostmi příspěvků. To poskytuje vývojářům frontendu menší kontrolu, aby mohli provádět změny nezávisle, ale větší kontrolu nad zneužitím rozhraní API k načítání nepotřebných dat po všech jeho rozhraních API pro uživatele. Dálkově ovládané experimenty Spouštění experimentů na nativních aplikacích pro iOS je obtížné, je třeba je znovu nasadit, aby bylo možné experimenty povolit nebo zakázat, ale Reddit nastavil aplikaci takovým způsobem, že experimenty lze ovládat na dálku. Všechny experimenty se načítají do rozhraní API spolu s jejich hodnotami a stavy. Aplikace automaticky aktivuje variantu experimentu, kterou přiřadila. Ovládání funkcí na základě příznaku S tolika uživateli, experimenty a funkcemi je lepší je ovládat na dálku. Reddit odvádí skvělou práci při ovládání těchto funkcí na dálku. Při každém spuštění aplikace zavolá konfigurační API pro načtení více než 400 konfiguračních proměnných. Na základě těchto proměnných ukazuje různé rysy a varianty vlastností. Tajemství karmy API s názvem operace získá seznam nejlepších subredditů s karma body získanými v každém z nich. Toto API odhaluje, kolik komentářů a post karmy jsme získali z naší činnosti v každém dílčím redditu. Tyto informace jsem nikdy nemohl najít ve webovém a mobilním uživatelském rozhraní Reddit. GetTopKarmaSubreddits Rozsah vylepšení Při čtení rozhraní API, abych zjistil, jaký typ dat přináší, jsem zjistil, že API načítá zdroj vybraného sub-redditu, ale s každým příspěvkem má vnořený JSON s podrobnými informacemi o sub-reddit. Tyto informace jsou nadbytečné a lze je odstranit, aby se snížilo zatížení sítě API a dále se zlepšil jeho výkon. SubredditFeedElements Poznámka: SubredditFeedElements API je nyní nahrazeno SubredditFeedSdui API a problém je vyřešen. Použijte AI pro statistiky Zkusil jsem použít ChatGPT, abych získal nějaké postřehy z API. Vytvořil tedy soubor se všemi API s jejich curl a jejich odpověďmi v něm. Nahrál jsem tento soubor do CustomGPT, abych mohl zadat jakýkoli typ dotazu. Poskytlo to několik poznatků, které byly zřejmé, jako jaký typ použití by API mohlo mít a strukturu odpovědi, ale hodně to halucinovalo, s největší pravděpodobností kvůli spoustě API nebo nejsem odborník na nabádání. Některé poznatky poskytnuté AI: API – Mnoho experimentů má specifické názvy „variant“, včetně možností jako , , a . Tato segmentace naznačuje, že Reddit testuje funkce na konkrétních uživatelských segmentech, aby zjistil jejich dopad. Například experiment má dvě varianty, a , které potenciálně testují funkci na základě stavu ověření uživatele. GetAllExperimentVariants enabled variant_1 control_model one_feed_ph_bridge_new_users d2x_avatar_in_comments_loggedin loggedin loggedout API – Experimenty zahrnují , a , které poukazují na širokou škálu testů funkcí zahrnujících funkce videa, umístění reklam, vylepšení uživatelského rozhraní a integrace třetích stran. GetAllExperimentVariants hybrid_video_rollout_android_v2 active_sales gql_google_maps_integration API — Odpověď API obsahuje různá pole s podrobnostmi o stavu účtu uživatele, jako je , , a stav moderátora uživatele. Kromě toho zahrnuje a , které udávají, zda je účet aktuálně pozastaven nebo omezen. GetAccountDetails isSubredditCreationAllowed isNameEditable isPasswordSet suspensionExpiresAt isSuspended Seznam API Existuje seznam GraphQL API, které jsem studoval, abych pochopil, jak funguje Reddit. Existovala některá další API, stejně jako autentizace, reporting atd. Nezahrnul jsem je do tohoto seznamu. Obrazovka GraphQL API (název operace) Popis Domov GetAllDynamicConfigs Načte více než 400 konfiguračních parametrů, na základě kterých fungují různé funkce aplikace. Konfigurace je v typickém formátu klíčové hodnoty spolu s typem hodnoty, kterou může být JSON, float, řetězec atd. GetAllExperimentVariants Požadavek obsahuje informace o aplikaci a zařízení k přiřazení experimentů určených pro zařízení a verzi aplikace. Odpověď obsahuje seznam všech experimentů s id, název experimentu, verze a stav. GetAccount Načte všechny podrobnosti o přihlášeném uživateli. HomeFeedSdui Načte prvních několik příspěvků s minimálními podrobnostmi, které se zobrazí na domovské stránce. FeedPostDetailsByIds Předem načte příspěvky pomocí ID se všemi podrobnostmi pro případ, že uživatel na příspěvek klikne. DiscoverBarRecommendations Objevte data lišty. Předplatné UserPremium Údaje související s uživatelským prémiovým předplatným GetUserAdEligibility Získá způsobilost uživatele pro reklamy a případné preference. BadgeCounts Informace o odznakech, které uživatel získal. Stránka Subreddit SubredditChannels Načte všechny základní podrobnosti o komunitě, jako je popis, ikony, počítadla, povolené typy příspěvků a barvy. SubredditTaxonomyTopics Načte kategorii komunity a zobrazí text, jako když načtu komunitu r/software, zobrazí se #20 v Software & Apps. IsInvitePending Jak název napovídá, zkontrolujte nevyřízenou pozvánku, ale nejste si jisti, která pozvánka přesně. SubredditChannels Načte chatovací kanály sub-redditu, zkontroloval jsem mnoho subredditů, ale žádné jsem nenašel. BlockedRedditors Přináší data, pokud je uživatel blokován. GetModerators Získá seznam modů. FetchStructuredStyleAndWidgets Toto API přináší informace o stylu, pravidlech a detailech komunity. FetchRelatedCommunityRecommendations Toto API přináší související komunity. SubredditMuting Zkontroluje, zda je sub reddit ztlumený. SubredditFeedElements Načte zdroj sub-reddit. Přebírá možnosti filtrů a rozložení vybrané pro dílčí reddit. Přináší všechny podrobnosti o příspěvcích, které se mají zobrazit ve zdroji. Komentáře PostInfoById Tento požadavek předem načte pouze komentáře prvního příspěvku. Stránka příspěvku GetCustomEmojisStatus Toto API bylo voláno s id sub-reddit a načítá stav vlastních emotikonů na sub-reddit. Není příliš jasné, proč se toto API nazývá, ale viděl jsem to při mnoha příležitostech. Odpověď byla ve všech testovaných případech. isEnabled: false GetSubredditAchievementFlairsStatus Podobně jako stav emotikonu převezme sub-reddit id a dostane odpověď isEnabled: false . Účel toho mi není jasný. Komentáře PostInfoById Toto rozhraní API se používá k načtení komentářů k příspěvku pomocí ID příspěvku předaného v požadavku. CommentsPageAds Načte reklamu těsně nad komentáře. Stránka profilu RedditorByName Načte detaily profilu přihlášeného uživatele. PostSetSettings Počet příspěvků k načtení. GetTopKarmaSubreddits Získejte seznam nejlepších subredditů s body karmy v každé komunitě, toto API odhaluje, kolik komentářů a post karmy jsme získali z naší aktivity v každém sub-redditu. UserProfileFeed Zdroj pro uživatelský profil obsahující komentáře a příspěvky. UserPublicTrophy Seznam úspěchů a trofejí získaných uživatelským jménem předaným v žádosti s ID, jménem a obrázkem, které se mají zobrazit. TippingProfileMigred Podrobnosti o profilu sklápění, tuto funkci jsem příliš nevyužíval. Na mém profilu to ukazovalo 0 zůstatek 😄. Závěr Na závěr tohoto experimentu bych rád uvedl několik poznámek. Rozhraní API Redditu nejsou příliš rychlá, místo toho používají předběžné načítání, aby poskytovaly lepší uživatelský zážitek. Práce s rozhraními API není nikdy dokončena, dokonce i inženýr Reddit má co dělat, aby ji dále vylepšil. Udržování konfigurací aplikací a experimentů na dálku může poskytnout dobrou kontrolu nad uživatelským zážitkem. Inženýři společnosti Requestly odvedli skvělou práci při zobrazování názvu operace s každým požadavkem GraphQL, což vývojářům výrazně usnadnilo život.