paint-brush
Рушење Реддит-ове иОС апликације – Увид у АПИ-је, перформансе, безбедност и А/Б експериментеод стране@hackercm3ebf0le00003b7n7h2a5k7d
Нова историја

Рушење Реддит-ове иОС апликације – Увид у АПИ-је, перформансе, безбедност и А/Б експерименте

од стране 7m2024/11/26
Read on Terminal Reader

Предуго; Читати

Моја радозналост ме је довела до анализе рада Реддит иОС апликације иза кулиса и открила неке добре увиде о Реддит АПИ-јима.
featured image - Рушење Реддит-ове иОС апликације – Увид у АПИ-је, перформансе, безбедност и А/Б експерименте
undefined HackerNoon profile picture
0-item

Сматрао сам да је искуство Реддит иОС апликације боље од веб верзије, па сам помислио да проверим како тако брзо учитава податке. Ево рушења Реддит-ове иОС апликације.


Ево неких најважнијих ствари:

  • Користи аутентификацију засновану на токенима.
  • Користи ГрапхКЛ АПИ-је за скоро све, од конфигурације и експеримената до објављивања информација.
  • Он прати перформансе свог АПИ система како га доживљавају корисници користећи АПИ под називом в3-репортинг.
  • У већини позива ГрапхКЛ АПИ-ја само се име операције прослеђује без променљивих, претпостављам да користе средњи софтвер да апстрахују конфигурацију променљивих из фронт-енд-а. Позадинска услуга попуњава информације на основу назива операције.
  • Реддит користи Веб Соцкет за функцију коментара уживо.


Ево детаљног растављања АПИ позива. Користио сам Рекуестли-ову Десктоп апликацију да пресретнем Реддит-ову иОС апликацију, упутства за подешавање су дата овде .

Коришћена технологија

Апликација Реддит је креирана са

  • Реддитова иОС апликација користи ГрапхКЛ АПИ-је за учитавање целог садржаја.
  • Потврда идентитета заснована на токенима се користи за валидацију корисника.
  • Праћење перформанси извештавањем о перформансама АПИ-ја на крају корисника.
  • Коментирање уживо је подржано помоћу ВебСоцкет-а.
  • Динамичка конфигурација за даљинско управљање понашањем апликације без примене нових верзија.
  • Динамички експерименти за даљинску контролу експеримената, без потребе за новом применом да бисте променили статус експеримента.

Бољи кориснички доживљај уз претходно учитавање

Главно питање које сам имао било је како апликација ради тако брзо, одговорено је када сам проверио одговор ФеедПостДетаилсБиИдс АПИ-ја. Овај АПИ се позива на почетном екрану са приказаним ИД-овима постова и долази са детаљним информацијама које се приказују након што кликнете на објаву. Ово претходно учитавање најбољих постова помогло је у тренутном приказивању екрана са детаљима објаве без икаквог учитача.


  • Постови који се унапред учитавају се приказују у фиду.
  • Време одговора АПИ-ја је такође веома брзо.

Безбедност ГрапхКЛ АПИ-ја

ГрапхКЛ упити се састоје од података и структуре потребног одговора. Име операције је генерално опционо. Већина Реддит АПИ-ја има само имена операција у упитима, а променљиве су доступне само када постоје променљиве/филтери на екрану као што је феед са врућим и најновијим опцијама за објаве.


Ово даје мање контроле фронтенд програмерима да самостално уносе промене, али већу контролу над злоупотребом АПИ-ја за дохваћање непотребних података након свих АПИ-ја окренутих према корисницима.

Експерименти на даљину

Покретање експеримената на изворним иОС апликацијама је тешко, потребно је поновно постављање да би се експерименти омогућили или онемогућили, али Реддит је подесио апликацију на такав начин да се експерименти могу контролисати на даљину. Сви експерименти се учитавају у АПИ заједно са њиховим вредностима и статусима. Апликација аутоматски активира варијанту експеримента који јој је доделила.

Контрола функција заснована на заставици

Са толико корисника, експеримената и функција, боље је контролисати их на даљину. Реддит одлично контролише ове функције на даљину.

ГетАллДинамицЦонфигс АПИ позив као што је приказано у Захтеву


Приликом сваког покретања апликације, она ће позвати конфигурациони АПИ за учитавање 400+ конфигурационих варијабли. На основу ових варијабли приказује различите карактеристике и варијанте карактеристика.

Цонфигс АПИ одговор

Тајна карме

АПИ са именом операције GetTopKarmaSubreddits добија листу најбољих субреддитова са карма поенима зарађеним у сваком. Овај АПИ открива колико смо коментара и карме постова стекли нашим активностима у сваком под-реддиту. Никада нисам могао да пронађем ове информације унутар Реддит-овог веб и мобилног корисничког интерфејса.


Карма за сваки Субреддит

Обим побољшања

Док сам читао АПИ-је да бих открио коју врсту података доноси, открио сам SubredditFeedElements АПИ учитава фид изабраног подреддит-а, али са сваким постом има угнежђени ЈСОН детаљних информација о суб-реддит-у. Ове информације су сувишне и могу се уклонити како би се смањило мрежно оптерећење АПИ-ја и додатно побољшале његове перформансе.


Напомена: SubredditFeedElements АПИ је сада замењен SubredditFeedSdui АПИ-јем и проблем је решен.

Користите вештачку интелигенцију за увиде

Покушао сам да користим ЦхатГПТ да добијем неке увиде из АПИ-ја. Тако је креиран фајл са свим АПИ-јима са њиховим цурл и њиховим одговорима у њему. Отпремио сам ову датотеку у ЦустомГПТ тако да могу да поставим било коју врсту упита. Дао је неке увиде који су били очигледни, попут врсте употребе АПИ-ја и структуре одговора, али је доста халуцинирало, највероватније због много АПИ-ја или ја нисам стручњак за подстицање. Неки од увида које је дала АИ:


  1. GetAllExperimentVariants АПИ — Многи експерименти имају специфичне називе „варијанти“, укључујући опције као што су enabled , variant_1 , control_model и one_feed_ph_bridge_new_users . Ова сегментација сугерише да Реддит тестира функције на одређеним сегментима корисника како би утврдио њихов утицај. На пример, експеримент d2x_avatar_in_comments_loggedin има две варијанте, loggedin и loggedout , потенцијално тестирајући функцију на основу стања аутентификације корисника.
  2. GetAllExperimentVariants АПИ — Експерименти укључују hybrid_video_rollout_android_v2 , active_sales и gql_google_maps_integration , који указују на широк спектар тестова функција који покривају видео функционалност, пласман огласа, побољшања корисничког интерфејса и интеграције трећих страна
  3. GetAccountDetails АПИ — АПИ одговор садржи различита поља са детаљима о статусу налога корисника, као што су isSubredditCreationAllowed , isNameEditable , isPasswordSet и статус модератора корисника. Поред тога, укључује suspensionExpiresAt и isSuspended , који показују да ли је налог тренутно суспендован или ограничен

Листа АПИ-ја

Постоји листа ГрапхКЛ АПИ-ја које сам проучавао да бих разумео како Реддит функционише. Постојали су и неки други АПИ-ји као што су аутентификација, извештавање итд. Нисам их укључио у ову листу.

Екран

ГрапхКЛ АПИ
(назив операције)

Опис

Хоме

ГетАллДинамицЦонфигс

Учитава 400+ конфигурационих параметара на основу којих различите функције апликације раде. Конфигурација је у типичном формату вредности кључа заједно са типом вредности који може бити ЈСОН, флоат, стринг итд.


ГетАллЕкпериментВариантс

Захтев садржи информације о апликацији и уређају за додељивање експеримената намењених верзији уређаја и апликације. Одговор садржи листу свих експеримената са ИД-ом, именом експеримента, верзијом и статусом.


ГетАццоунт

Учитава све детаље пријављеног корисника.


ХомеФеедСдуи

Учитава првих неколико постова са минималним детаљима за приказ на почетној страници.


ФеедПостДетаилсБиИдс

Унапред учитава постове користећи ИД-ове са свим детаљима, у случају да корисник кликне на објаву.


ДисцоверБарРецоммендатионс

Откријте податке траке.


УсерПремиумСубсцриптион

Подаци који се односе на корисничку премијум претплату


ГетУсерАдЕлигибилити

Добија квалификованост корисника за оглас и сва подешавања.


БадгеЦоунтс

Информације о беџевима које је корисник зарадио.




Субреддит Паге

СубреддитЦханнелс

Учитава све основне детаље о заједници као што су опис, иконе, бројачи, дозвољени типови објава и боје.


СубреддитТакономиТопицс

Учитава категорију заједнице и текст на екрану, као ако учитам заједницу р/софтвер, приказаће се #20 у софтверу и апликацијама.


ИсИнвитеПендинг

Као што име сугерише, проверите да ли постоји позив на чекању, али нисте сигурни који је то позив.


СубреддитЦханнелс

Учитава канале за ћаскање суб-реддит-а, проверио сам много субреддита, али нисам могао да нађем ниједан.


БлоцкедРеддорс

Доноси податке ако је корисник блокиран.


ГетМодераторс

Добија листу модова.


ФетцхСтруцтуредСтилеАндВидгетс

Овај АПИ доноси информације о стилу, правилима и детаљима заједнице.


ФетцхРелатедЦоммунитиРецоммендатионс

Овај АПИ доноси сродне заједнице.


СубреддитМутинг

Проверава да ли је суб реддит искључен.


СубреддитФеедЕлементс

Учитава фид суб-реддит-а. Потребни су филтери и опције изгледа изабране за подреддит. Доноси све детаље о објавама које ће бити приказане у фиду.


ПостИнфоБиИдЦомментс

Овај захтев унапред учитава само коментаре првог поста.




Пост Паге

ГетЦустомЕмојисСтатус

Овај АПИ је позван са суб-реддит ИД-ом и учитава статус прилагођених емоџија на суб-реддит. Није баш јасно зашто се овај АПИ зове, али сам га видео у много прилика. Одговор је био isEnabled: false у свим случајевима које је тестирао.


ГетСубреддитАцхиевементФлаирсСтатус

Слично статусу емоџија, он узима суб-реддит ИД и добија одговор као исЕнаблед: фалсе . Сврха овога није ми јасна.


ПостИнфоБиИдЦомментс

Овај АПИ се користи за учитавање коментара на пост коришћењем ИД-а поста који је прослеђен у захтеву.


ЦомментсПагеАдс

Учитава оглас одмах изнад коментара.




Страница профила

РеддиторБиНаме

Учитава детаље профила пријављеног корисника.


ПостСетСеттингс

Број постова за учитавање.


ГетТопКармаСубреддитс

Набавите листу најбољих субредита са карма поенима у свакој заједници, овај АПИ открива колико смо коментара и карме постова зарадили од наших активности у сваком подредиту.


УсерПрофилеФеед

Фид за кориснички профил који садржи коментаре и постове.


УсерПублицТропхиес

Листа достигнућа и трофеја зарађених корисничким именом које је прослеђено у захтеву са ИД-ом, именом и сликом за приказ.


ТиппингПрофилеМигратед

Детаљи о профилу за напојницу, нисам много користио ову функцију. Показало је 0 стања на мом профилу 😄.

Закључак

Желео бих да наведем неколико тачака у закључку овог експеримента рушења.

  • Реддит АПИ-ји нису баш брзи, уместо тога користе претходно учитавање да би пружили боље корисничко искуство.
  • Рад АПИ-ја никада није завршен, чак и Реддит-ов инжењер мора да уради нешто да га додатно унапреди.
  • Чување конфигурација апликација и експеримента на даљину може дати добру контролу над корисничким искуством.
  • Рекуестли-јеви инжењери су урадили одличан посао у приказивању назива операције са сваким ГрапхКЛ захтевом, чинећи живот програмерима много лакшим.