paint-brush
Reddit को आईओएस अनुप्रयोग च्यात्दै - APIs, प्रदर्शन, सुरक्षा, र A/B प्रयोगहरूमा अन्तर्दृष्टिहरूद्वारा@hackercm3ebf0le00003b7n7h2a5k7d
नयाँ इतिहास

Reddit को आईओएस अनुप्रयोग च्यात्दै - APIs, प्रदर्शन, सुरक्षा, र A/B प्रयोगहरूमा अन्तर्दृष्टिहरू

द्वारा 7m2024/11/26
Read on Terminal Reader

धेरै लामो; पढ्नकाे लागि

मेरो जिज्ञासाले मलाई Reddit iOS एपको काम गर्ने पर्दा पछाडिको विश्लेषण गर्न नेतृत्व गर्यो र Reddit API को बारेमा केही राम्रो अन्तरदृष्टि प्रकट गर्यो।
featured image - Reddit को आईओएस अनुप्रयोग च्यात्दै - APIs, प्रदर्शन, सुरक्षा, र A/B प्रयोगहरूमा अन्तर्दृष्टिहरू
undefined HackerNoon profile picture
0-item

मैले Reddit को iOS एपको अनुभव वेब संस्करण भन्दा राम्रो पाएको छु, त्यसैले मैले यो कसरी छिटो डेटा लोड गर्छ भनेर जाँच गर्ने सोचें। यहाँ Reddit को आईओएस एप को टियरडाउन छ।


यहाँ केहि हाइलाइटहरू छन्:

  • यसले टोकन-आधारित प्रमाणीकरण प्रयोग गर्दछ।
  • यसले कन्फिगरेसन र प्रयोगहरूबाट जानकारी पोस्ट गर्न लगभग सबै कुराको लागि GraphQL API हरू प्रयोग गर्दछ।
  • यसले w3-रिपोर्टिङ नामको API प्रयोग गरेर यसको प्रयोगकर्ताहरूले अनुभव गरेको API प्रणालीको कार्यसम्पादनलाई निगरानी गर्दछ।
  • धेरै जसो GraphQL API कलहरूमा केवल अपरेशन नाम चर बिना पारित हुन्छ, म मान्दै छु कि उनीहरूले फ्रन्ट-एन्डबाट चरहरूको कन्फिगरेसन सार गर्न मिडलवेयर प्रयोग गर्दैछन्। ब्याकइन्ड सेवाले सञ्चालनको नाममा आधारित जानकारी भरिरहेको छ।
  • Reddit लाइभ टिप्पणी सुविधाको लागि वेब सकेट प्रयोग गर्दछ।


यहाँ API कलहरूको विस्तृत टियरडाउन छ। मैले Reddit को iOS एपलाई रोक्नको लागि Requestly को डेस्कटप एप प्रयोग गरें, सेटअप निर्देशनहरू यहाँ प्रदान गरिएको छ।

प्रविधि प्रयोग गरियो

Reddit एप संग सिर्जना गरिएको छ

  • Reddit को iOS एपले सबै सामग्री लोड गर्न GraphQL API प्रयोग गर्छ।
  • टोकन-आधारित प्रमाणीकरण प्रयोगकर्ताहरू मान्य गर्न प्रयोग गरिन्छ।
  • प्रयोगकर्ताको अन्तमा API कार्यसम्पादन रिपोर्ट गरेर प्रदर्शन निगरानी।
  • लाइभ टिप्पणी WebSocket प्रयोग गरी समर्थित छ।
  • डायनामिक कन्फिगरेसन नयाँ संस्करणहरू प्रयोग नगरी टाढाबाट एप व्यवहार नियन्त्रण गर्न।
  • डायनामिक प्रयोगहरू टाढाबाट नियन्त्रण गर्न प्रयोगहरू, प्रयोगको स्थिति परिवर्तन गर्न नयाँ परिनियोजन आवश्यक पर्दैन।

प्रीलोडिङको साथ राम्रो UX

मसँग भएको मुख्य प्रश्न यो थियो कि एपले कसरी छिटो प्रदर्शन गरिरहेको छ FeedPostDetailsByIds API को प्रतिक्रिया जाँच गर्दा जवाफ दिइयो। यो API देखाइएका पोष्टहरूको आईडीको साथ गृह स्क्रिनमा कल गरिन्छ र पोस्टमा क्लिक गरेपछि देखाइने विस्तृत जानकारीको साथ आउँछ। शीर्ष पोस्टहरूको यो प्रिलोडिङले कुनै पनि लोडर बिना पोस्ट विवरण स्क्रिन तुरुन्तै देखाउन मद्दत गर्यो।


  • प्रिलोडिङ पोस्टहरू फिडमा देखाइन्छ।
  • API को प्रतिक्रिया समय पनि धेरै छिटो छ।

GraphQL APIs सुरक्षा

GraphQL प्रश्नहरूमा आवश्यक प्रतिक्रियाको डेटा र संरचना समावेश हुन्छ। सञ्चालन नाम सामान्यतया वैकल्पिक छ। धेरै जसो Reddit API हरूमा क्वेरीहरूमा मात्र सञ्चालन नामहरू हुन्छन् र चरहरू तब मात्र उपलब्ध हुन्छन् जब त्यहाँ अन-स्क्रिन चर/फिल्टरहरू जस्तै तातो र नवीनतम पोस्ट विकल्पहरू सहित फिडहरू हुन्छन्।


यसले फ्रन्टएन्ड विकासकर्ताहरूलाई स्वतन्त्र रूपमा परिवर्तनहरू गर्न कम नियन्त्रण दिन्छ तर यसको प्रयोगकर्ता-फेसिङ API पछि अनावश्यक डाटा ल्याउन API हरूको दुरुपयोगमा बढी नियन्त्रण दिन्छ।

रिमोट कन्ट्रोल प्रयोगहरू

नेटिभ आईओएस एपहरूमा प्रयोगहरू चलाउन गाह्रो छ यसलाई प्रयोगहरू सक्षम वा असक्षम गर्न पुन: डिप्लोयमेन्टहरू चाहिन्छ, तर Reddit ले एपलाई यसरी सेटअप गरेको छ कि प्रयोगहरू टाढाबाट नियन्त्रण गर्न सकिन्छ। सबै प्रयोगहरू API मा तिनीहरूको मान र स्थितिहरू सहित लोड हुन्छन्। अनुप्रयोगले स्वचालित रूपमा यसलाई तोकिएको प्रयोगको संस्करण सक्रिय गर्दछ।

फ्ल्याग-आधारित सुविधाहरू नियन्त्रण

धेरै प्रयोगकर्ताहरू, प्रयोगहरू र सुविधाहरूको साथ तिनीहरूलाई टाढाबाट नियन्त्रण गर्न राम्रो छ। Reddit ले टाढाबाट यी सुविधाहरू नियन्त्रण गर्न ठूलो काम गर्छ।

GetAllDynamicConfigs API कल अनुरोधमा देखाइएको अनुसार


एपको हरेक लन्चमा, यसले 400+ कन्फिगरेसन चरहरू लोड गर्न कन्फिगरेसन API कल गर्नेछ। यी चरहरूको आधारमा यसले विभिन्न सुविधाहरू र सुविधाहरूको भिन्नताहरू देखाउँछ।

कन्फिग API प्रतिक्रिया

कर्मको रहस्य

GetTopKarmaSubreddits सञ्चालन नामको API ले प्रत्येकमा कमाएको कर्म अंकसहित शीर्ष सबरेडडिटहरूको सूची प्राप्त गर्दछ। यो एपीआईले प्रत्येक उप-रेडिटमा हाम्रो गतिविधिबाट कति टिप्पणीहरू र पोस्ट कर्म प्राप्त गरेका छौं भनेर प्रकट गर्दछ। मैले Reddit को वेब र मोबाइल UI भित्र यो जानकारी कहिल्यै फेला पार्न सकिन।


प्रत्येक Subreddit को लागि कर्म

सुधारको दायरा

यसले कस्तो प्रकारको डाटा ल्याउँछ पत्ता लगाउन API हरू पढ्दा, मैले SubredditFeedElements API ले चयन गरिएको उप-reddit को फिड लोड गरेको फेला पारे तर प्रत्येक पोष्टको साथ, यसमा विस्तृत उप-reddit जानकारीको नेस्टेड JSON छ। यो जानकारी अनावश्यक छ र API को नेटवर्क लोड कम गर्न र यसको कार्यसम्पादन सुधार गर्न हटाउन सकिन्छ।


नोट: SubredditFeedElements API अब SubredditFeedSdui API द्वारा प्रतिस्थापन गरिएको छ र मुद्दा फिक्स गरिएको छ।

अन्तर्दृष्टिको लागि AI प्रयोग गर्नुहोस्

मैले API बाट केही अन्तरदृष्टि प्राप्त गर्न ChatGPT प्रयोग गर्ने प्रयास गरें। त्यसोभए सबै एपीआईहरूसँग तिनीहरूको कर्ल र तिनीहरूको प्रतिक्रियाहरूको साथ एउटा फाइल सिर्जना गरियो। यस फाइललाई CustomGPT मा अपलोड गरियो ताकि म कुनै पनि प्रकारको क्वेरी राख्न सक्छु। यसले केहि अन्तर्दृष्टिहरू दियो जुन स्पष्ट थियो कि कुन प्रकारको एपीआई प्रयोग हुन सक्छ र प्रतिक्रियाको संरचना हुन सक्छ तर यसले धेरै भ्रमित गरेको छ, सम्भवतः धेरै एपीआईहरूको कारणले वा म प्रोम्प्टिङमा कुनै विशेषज्ञ छैन। AI द्वारा दिएका केही अन्तर्दृष्टिहरू:


  1. GetAllExperimentVariants API — धेरै प्रयोगहरूमा enabled , variant_1 , control_model , र one_feed_ph_bridge_new_users जस्ता विकल्पहरू सहित विशिष्ट "भ्यारिएन्ट" नामहरू हुन्छन्। यो विभाजनले सुझाव दिन्छ कि Reddit विशेष प्रयोगकर्ता खण्डहरूमा तिनीहरूको प्रभाव निर्धारण गर्न सुविधाहरूको परीक्षण गरिरहेको छ। उदाहरणका लागि, प्रयोग d2x_avatar_in_comments_loggedin दुईवटा भेरियन्टहरू छन्, loggedin , र loggedout , सम्भावित रूपमा प्रयोगकर्ता प्रमाणीकरण स्थितिमा आधारित सुविधाको परीक्षण गर्दै।
  2. GetAllExperimentVariants API — प्रयोगहरूले hybrid_video_rollout_android_v2 , active_sales , र gql_google_maps_integration समावेश गर्दछ, जसले भिडियो कार्यक्षमता, विज्ञापन प्लेसमेन्टहरू, प्रयोगकर्ता इन्टरफेस संवर्द्धनहरू, र तेस्रो-पक्ष एकीकरणहरू कभर गर्ने सुविधा परीक्षणहरूको विस्तृत दायरालाई औंल्याउँछ।
  3. GetAccountDetails API - API प्रतिक्रियाले प्रयोगकर्ताको खाता स्थिति विवरण गर्ने विभिन्न क्षेत्रहरू समावेश गर्दछ, जस्तै isSubredditCreationAllowed , isNameEditable , isPasswordSet , र प्रयोगकर्ताको मध्यस्थ स्थिति। थप रूपमा, यसले suspensionExpiresAtisSuspended समावेश गर्दछ, जसले खाता हाल निलम्बित वा प्रतिबन्धित छ भने संकेत गर्दछ।

API को सूची

त्यहाँ GraphQL API को सूची छ जुन मैले Reddit कसरी काम गर्दछ भनेर बुझ्नको लागि अध्ययन गरेको छु। त्यहाँ केहि अन्य API हरू थिए जस्तै प्रमाणीकरण, रिपोर्टिङ आदि। मैले तिनीहरूलाई यो सूचीमा समावेश गरेको छैन।

स्क्रिन

GraphQL API
(सञ्चालनको नाम)

विवरण

घर

GetAllDynamicConfigs

400+ कन्फिगरेसन प्यारामिटरहरू लोड गर्दछ जसको आधारमा एपका विभिन्न सुविधाहरूले काम गर्दछ। कन्फिगरेसन विशिष्ट कुञ्जी मान ढाँचामा छ र मानको प्रकारको साथमा छ जुन JSON, फ्लोट, स्ट्रिङ आदि हुन सक्छ।


सबै प्रयोग भेरियन्टहरू प्राप्त गर्नुहोस्

अनुरोधले यन्त्र र एप संस्करणको लागि प्रयोगहरू तोक्न एप र यन्त्रको बारेमा जानकारी समावेश गर्दछ। प्रतिक्रियाले id, experimentName, संस्करण र स्थिति सहित सबै प्रयोगहरूको सूची समावेश गर्दछ।


खाता प्राप्त गर्नुहोस्

लगइन गरिएको प्रयोगकर्ताको सबै विवरणहरू लोड गर्दछ।


HomeFeedSdui

गृहपृष्ठमा देखाउनको लागि न्यूनतम विवरणहरूको साथ पहिलो केही पोष्टहरू लोड गर्दछ।


FeedPostDetailsByIds

प्रयोगकर्ताले पोष्टमा क्लिक गरेमा सबै विवरणहरू सहित ids प्रयोग गरेर पोस्टहरू प्रिलोड गर्दछ।


DiscoverBar सिफारिसहरू

बार डाटा पत्ता लगाउनुहोस्।


प्रयोगकर्ता प्रिमियम सदस्यता

प्रयोगकर्ता प्रिमियम सदस्यता सम्बन्धित डाटा


GetUserAdEligibility

प्रयोगकर्ताको विज्ञापन योग्यता र कुनै पनि प्राथमिकताहरू प्राप्त गर्दछ।


ब्याज गणनाहरू

प्रयोगकर्ता द्वारा कमाएको ब्याज बारे जानकारी।




Subreddit पृष्ठ

Subreddit च्यानलहरू

समुदायको बारेमा सबै आधारभूत विवरणहरू लोड गर्दछ जस्तै वर्णन, आइकनहरू, काउन्टरहरू, अनुमति दिइएको पोस्ट प्रकारहरू, र रङहरू।


SubredditTaxonomyTopics

समुदायको वर्ग र प्रदर्शन पाठ लोड गर्दछ यदि मैले समुदाय आर/सफ्टवेयर लोड गरेमा यसले सफ्टवेयर र एपहरूमा #20 देखाउनेछ।


निमन्त्रणा विचाराधीन छ

नामले विचाराधीन निमन्त्रणाको लागि जाँच गर्ने सुझाव दिन्छ, तर कुन निमन्त्रणा निश्चित रूपमा निश्चित छैन।


Subreddit च्यानलहरू

sub-reddit को च्याट च्यानलहरू लोड गर्दछ, मैले धेरै subreddits जाँच गरें तर कुनै फेला पार्न सकेन।


अवरुद्ध Redditors

यदि प्रयोगकर्ता अवरुद्ध छ भने डाटा ल्याउँछ।


GetModerators

मोडहरूको सूची प्राप्त गर्दछ।


स्ट्रक्चर्ड स्टाइल र विजेटहरू ल्याउनुहोस्

यो API ले समुदायको शैली, नियम र विवरणहरूको बारेमा जानकारी ल्याउँछ।


सम्बन्धित समुदाय सिफारिसहरू प्राप्त गर्नुहोस्

यो API ले सम्बन्धित समुदायहरू ल्याउँछ।


SubredditMuting

sub reddit मौन छ कि छैन जाँच गर्दछ।


SubredditFeedElements

sub-reddit को फिड लोड गर्दछ। यसले उप-रेडडिटका लागि चयन गरिएका फिल्टर र लेआउट विकल्पहरू लिन्छ। फिडमा देखाइने पोष्टहरूको बारेमा सबै विवरणहरू ल्याउँछ।


PostInfoByIdComments

यो अनुरोधले पहिलो पोस्टको टिप्पणीहरू मात्र प्रीलोड गर्दछ।




पोस्ट पृष्ठ

GetCustomEmojisStatus

यो API लाई sub-reddit id मार्फत कल गरिएको थियो र sub-reddit मा आफू अनुकूल इमोजीहरूको स्थिति लोड गर्दछ। यो एपीआई किन भनिन्छ भन्ने बारे धेरै स्पष्ट छैन, तर मैले यसलाई धेरै अवसरहरूमा देखेको छु। प्रतिक्रिया isEnabled: false


GetSubredditAchievementFlairsStatus

इमोजी स्थिति जस्तै यसले sub-reddit id लिन्छ र isEnabled: false को रूपमा प्रतिक्रिया प्राप्त गर्दछ। यसको उद्देश्य मलाई स्पष्ट छैन।


PostInfoByIdComments

यो API अनुरोधमा पास गरिएको पोस्ट आईडी प्रयोग गरेर पोष्टको टिप्पणीहरू लोड गर्न प्रयोग गरिन्छ।


CommentsPageAds

टिप्पणीहरू माथि मात्र विज्ञापन लोड गर्नुहोस्।




प्रोफाइल पृष्ठ

RedditorByName

लगइन गरिएको प्रयोगकर्ताको प्रोफाइल विवरणहरू लोड गर्दछ।


PostSetSettings

लोड गर्न पोस्टहरूको संख्या।


GetTopKarmaSubreddits

प्रत्येक समुदायमा कर्म बिन्दुहरूको साथ शीर्ष सब-रेडडिटहरूको सूची प्राप्त गर्नुहोस्, यो एपीआईले प्रत्येक उप-रेडिटमा हाम्रो गतिविधिबाट कति टिप्पणी र पोस्ट कर्म कमाएको छ भन्ने कुरा प्रकट गर्दछ।


प्रयोगकर्ता प्रोफाइलफिड

टिप्पणी र पोस्टहरू समावेश प्रयोगकर्ता प्रोफाइलको लागि फिड।


UserPublicTrophies

आइडी, नाम र छवि देखाउन अनुरोधमा पास गरिएको प्रयोगकर्ता नामद्वारा कमाइएका उपलब्धिहरू र ट्रफीहरूको सूची।


TippingProfileMigrated

टिपिङ प्रोफाइलको बारेमा विवरणहरू, यो सुविधा धेरै प्रयोग गरेको छैन। यसले मेरो प्रोफाइलमा ० ब्यालेन्स देखाएको छ 😄।

निष्कर्ष

म यस टियर डाउन प्रयोगको निष्कर्षमा दुई बुँदाहरू बनाउन चाहन्छु।

  • Reddit को API हरू धेरै छिटो छैनन् बरु तिनीहरूले राम्रो प्रयोगकर्ता अनुभव दिन प्रीलोडिङ प्रयोग गर्छन्।
  • API को काम कहिल्यै पूरा हुँदैन, Reddit को इन्जिनियरले पनि यसलाई अझ सुधार गर्न केहि काम गर्नुपर्दछ।
  • एप र प्रयोग कन्फिगरेसनहरू टाढाबाट राख्दा प्रयोगकर्ता अनुभवमा राम्रो नियन्त्रण दिन सक्छ।
  • Requestly का इन्जिनियरहरूले प्रत्येक GraphQL अनुरोधसँग सञ्चालनको नाम देखाउनमा उत्कृष्ट काम गरे, devs को जीवन धेरै सजिलो बनाउँदै।