من تجربه برنامه iOS Reddit را بهتر از نسخه وب یافتم، بنابراین به فکر افتادم که بررسی کنم چگونه داده ها را با این سرعت بارگیری می کند. در اینجا حذف برنامه iOS Reddit است. در اینجا برخی از نکات برجسته وجود دارد: از احراز هویت مبتنی بر توکن استفاده می کند. تقریباً برای همه چیز از پیکربندی و آزمایشها گرفته تا اطلاعات ارسالی از GraphQL API استفاده میکند. با استفاده از یک API به نام w3-reporting، عملکرد سیستم API خود را همانطور که توسط کاربران تجربه شده است، نظارت می کند. در بیشتر فراخوانیهای GraphQL API فقط نام عملیات بدون متغیر ارسال میشود، من فرض میکنم که آنها از میانافزار برای انتزاع پیکربندی متغیرها از front-end استفاده میکنند. یک سرویس پشتیبان در حال پر کردن اطلاعات بر اساس نام عملیات است. Reddit از Web Socket برای ویژگی نظرات زنده استفاده می کند. در اینجا تجزیه و تحلیل دقیق فراخوان های API است. من برای رهگیری برنامه iOS Reddit استفاده کردم، دستورالعملهای راهاندازی ارائه شده است. از برنامه Desktop Requestly در اینجا تکنولوژی مورد استفاده برنامه Reddit با ایجاد شده است برنامه iOS Reddit از API های GraphQL برای بارگیری تمام محتوا استفاده می کند. احراز هویت مبتنی بر توکن برای اعتبارسنجی کاربران استفاده می شود. نظارت بر عملکرد با گزارش عملکرد API در انتهای کاربر. نظر دادن زنده با استفاده از WebSocket پشتیبانی می شود. پیکربندی پویا برای کنترل از راه دور رفتار برنامه بدون استقرار نسخه های جدید. آزمایشهای پویا برای کنترل آزمایشها از راه دور، بدون نیاز به استقرار جدید برای تغییر وضعیت آزمایش. UX بهتر با پیش بارگیری سوال اصلی من این بود که چگونه برنامه به این سرعت عمل می کند با بررسی پاسخ API پاسخ داده شد. این API در صفحه اصلی با شناسه پستهای نشان داده شده فراخوانی میشود و همراه با اطلاعات دقیقی است که پس از کلیک روی پست نشان داده میشود. این پیش بارگذاری پست های برتر به نمایش فوری صفحه جزئیات پست بدون هیچ بارگیری کمک کرد. FeedPostDetailsByIds پست های پیش بارگذاری در فید نشان داده می شوند. زمان پاسخگویی APIها نیز بسیار سریع است. امنیت GraphQL APIs پرس و جوهای GraphQL شامل داده ها و ساختار پاسخ مورد نیاز است. نام عملیات عموما اختیاری است. اکثر API های Reddit فقط نام عملیات در جستارها دارند و متغیرها فقط زمانی در دسترس هستند که متغیرها/فیلترهایی مانند فید با گزینه های داغ و آخرین پست وجود داشته باشد. این امر به توسعه دهندگان فرانت اند کنترل کمتری می دهد تا بتوانند به طور مستقل تغییراتی ایجاد کنند، اما کنترل بیشتری بر استفاده نادرست از API ها برای واکشی داده های غیر ضروری پس از تمام API های کاربر می دهد. آزمایش های کنترل از راه دور اجرای آزمایشها بر روی برنامههای اصلی iOS دشوار است و برای فعال یا غیرفعال کردن آزمایشها نیاز به استقرار مجدد دارد، اما Reddit برنامه را به گونهای تنظیم کرده است که آزمایشها را میتوان از راه دور کنترل کرد. همه آزمایشها به همراه مقادیر و وضعیتهایشان در یک API بارگذاری میشوند. برنامه به طور خودکار نوع آزمایشی را که اختصاص داده است فعال می کند. کنترل ویژگی های مبتنی بر پرچم با این همه کاربر، آزمایش و ویژگی، بهتر است آنها را از راه دور کنترل کنید. Reddit کار بسیار خوبی برای کنترل این ویژگی ها از راه دور انجام می دهد. در هر راه اندازی برنامه، یک API پیکربندی برای بارگیری بیش از 400 متغیر پیکربندی فراخوانی می کند. بر اساس این متغیرها، ویژگی ها و انواع مختلفی از ویژگی ها را نشان می دهد. راز کارماس API با نام عملیات فهرست زیرمجموعه های برتر را با امتیاز کارما کسب می کند. این API نشان میدهد که در هر زیر ردیت چه تعداد نظر و کارما از فعالیتهای خود به دست آوردهایم. من هرگز نتوانستم این اطلاعات را در رابط کاربری وب و موبایل Reddit پیدا کنم. GetTopKarmaSubreddits دامنه بهبود در حین خواندن APIها برای یافتن نوع دادههایی که به ارمغان میآورد، متوجه شدم API فید زیر reddit انتخاب شده را بارگیری میکند، اما با هر پست، یک JSON تودرتو از اطلاعات جزئی reddit دارد. این اطلاعات اضافی هستند و می توانند برای کاهش بار شبکه API و بهبود عملکرد آن حذف شوند. SubredditFeedElements API اکنون با API توجه: SubredditFeedElements SubredditFeedSdui جایگزین شده و مشکل برطرف شده است. از هوش مصنوعی برای Insights استفاده کنید من سعی کردم از ChatGPT برای دریافت اطلاعاتی از APIها استفاده کنم. بنابراین یک فایل با تمام APIها با curl و پاسخ های آنها در آن ایجاد کرد. این فایل را در یک CustomGPT آپلود کردم تا بتوانم هر نوع درخواستی را قرار دهم. این اطلاعات بینش هایی را ارائه داد که مشهود بود مانند نوع استفاده از یک API و ساختار پاسخ، اما توهم زیادی داشت، به احتمال زیاد به دلیل تعداد زیادی API یا من متخصص در این امر نیستم. برخی از بینش های ارائه شده توسط AI: API — بسیاری از آزمایشها دارای نامهای «نوعی» خاص هستند، از جمله گزینههایی مانند ، ، ، و . این تقسیم بندی نشان می دهد که Reddit در حال آزمایش ویژگی ها بر روی بخش های خاص کاربر برای تعیین تأثیر آنها است. به عنوان مثال، آزمایش دارای دو نوع است، و که به طور بالقوه این ویژگی را بر اساس وضعیت احراز هویت کاربر آزمایش می کند. GetAllExperimentVariants enabled variant_1 control_model one_feed_ph_bridge_new_users d2x_avatar_in_comments_loggedin loggedin loggedout API — آزمایشها شامل ، ، و هستند که به طیف گستردهای از تستهای ویژگی شامل عملکرد ویدیو، قرار دادن تبلیغات، بهبود رابط کاربری، و ادغام شخص ثالث اشاره میکنند. GetAllExperimentVariants hybrid_video_rollout_android_v2 active_sales gql_google_maps_integration API — پاسخ API حاوی فیلدهای مختلفی است که وضعیت حساب کاربر را شرح می دهد، مانند ، ، ، و وضعیت ناظم کاربر. علاوه بر این، شامل و می شود که نشان می دهد یک حساب در حال حاضر به حالت تعلیق یا محدود شده است GetAccountDetails isSubredditCreationAllowed isNameEditable isPasswordSet suspensionExpiresAt isSuspended لیست API ها لیستی از API های GraphQL وجود دارد که من برای درک نحوه عملکرد Reddit مطالعه کردم. برخی از APIهای دیگر نیز وجود داشت، مانند احراز هویت، گزارشگیری و غیره. من آنها را در این لیست قرار ندادم. صفحه نمایش GraphQL API (نام عملیات) توضیحات صفحه اصلی GetAllDynamicConfigs بیش از 400 پارامتر پیکربندی را بارگیری می کند که بر اساس آنها ویژگی های مختلف برنامه کار می کند. پیکربندی در قالب مقدار کلید معمولی همراه با نوع مقدار است که می تواند JSON، float، رشته و غیره باشد. GetAllExperimentVariants درخواست حاوی اطلاعاتی درباره برنامه و دستگاه برای تخصیص آزمایشهای مربوط به دستگاه و نسخه برنامه است. پاسخ شامل فهرستی از تمام آزمایشها با شناسه، نام آزمایش، نسخه و وضعیت است. GetAccount تمام جزئیات کاربر وارد شده را بارگیری می کند. HomeFeedSdui چند پست اول را با حداقل جزئیات برای نمایش در صفحه اصلی بارگیری می کند. FeedPostDetailsByIds در صورتی که کاربر روی پست کلیک کند، پست ها را با استفاده از شناسه با تمام جزئیات بارگذاری می کند. DiscoverBarRecommendations داده های نوار را کشف کنید. اشتراک UserPremium داده های مربوط به اشتراک حق بیمه کاربر GetUserAdEligibility واجد شرایط بودن آگهی کاربر و هر اولویت را دریافت می کند. BadgeCounts اطلاعات در مورد نشان های به دست آمده توسط کاربر. صفحه Subreddit SubredditChannels همه جزئیات اساسی درباره انجمن مانند توضیحات، نمادها، شمارندهها، انواع پستهای مجاز و رنگها را بارگیری میکند. SubredditTaxonomyTopics دسته انجمن و یک متن نمایشگر را بارگیری می کند، مانند اینکه اگر انجمن را/نرم افزار بارگیری کنم، شماره 20 را در نرم افزار و برنامه ها نشان می دهد. IsInvitePending همانطور که از نام آن پیداست، دعوتنامهای در انتظار را بررسی کنید، اما مطمئن نیستید که دقیقاً کدام دعوت است. SubredditChannels کانالهای چت سابردیت را بار میکند، بسیاری از سابردیتها را بررسی کردم اما نتوانستم هیچ کدام را پیدا کنم. BlockedRedditors در صورت مسدود شدن کاربر، داده را می آورد. GetModerators لیست مدها را دریافت می کند. FetchStructuredStyleAndWidgets این API اطلاعاتی در مورد سبک، قوانین و جزئیات جامعه به ارمغان می آورد. FetchRelatedCommunityRecommendations این API جوامع مرتبط را به ارمغان می آورد. Subreddit Muting بررسی میکند که آیا Sub reddit خاموش است یا خیر. SubredditFeedElements فید sub-reddit را بارگیری می کند. فیلترها و گزینههای طرحبندی انتخابشده برای reddit فرعی را میگیرد. تمام جزئیات مربوط به پست ها را برای نمایش در فید به ارمغان می آورد. PostInfoByIdComments این درخواست فقط نظرات اولین پست را از قبل بارگذاری می کند. صفحه پست GetCustomEmojisStatus این API با شناسه sub-reddit فراخوانی شد و وضعیت ایموجی های سفارشی را در sub-reddit بارگیری می کند. دلیل نامگذاری این API خیلی واضح نیست، اما من بارها آن را دیده ام. پاسخ در تمام مواردی که آزمایش شد، . isEnabled: false GetSubredditAchievementFlairsStatus مشابه وضعیت ایموجی، شناسه زیر ردیت را می گیرد و به صورت isEnabled: false پاسخ می گیرد. هدف از این کار برای من روشن نیست. PostInfoByIdComments این API برای بارگیری نظرات پست با استفاده از شناسه پست ارسال شده در درخواست استفاده می شود. CommentsPageAds آگهی را درست بالای نظرات بارگیری می کند. صفحه نمایه RedditorByName جزئیات نمایه کاربری وارد شده را بارگیری می کند. PostSetSettings تعداد پست برای بارگذاری GetTopKarmaSubreddits فهرستی از زیرمجموعه های برتر با امتیاز کارما را در هر انجمن دریافت کنید، این API نشان می دهد که چه تعداد نظر و پست کارما از فعالیت خود در هر زیر ردیت به دست آورده ایم. UserProfileFeed فید نمایه کاربر حاوی نظرات و پستها. UserPublicTrophies فهرست دستاوردها و تروفی های کسب شده توسط نام کاربری که در درخواست ارسال شده با شناسه، نام و تصویر برای نمایش داده می شود. TippingProfileMigrated جزئیات مربوط به نمایه انعام، از این ویژگی زیاد استفاده نشده است. تو پروفایلم 0 موجودی نشون داد 😄. نتیجه گیری من می خواهم در پایان این آزمایش تخریب چند نکته را بیان کنم. API های Reddit خیلی سریع نیستند، در عوض از پیش بارگذاری برای ارائه تجربه کاربری بهتر استفاده می کنند. کار API ها هرگز کامل نمی شود، حتی مهندس Reddit باید برای بهبود بیشتر آن کار انجام دهند. حفظ تنظیمات برنامه و آزمایش از راه دور می تواند کنترل خوبی بر تجربه کاربر داشته باشد. مهندسان Requestly در نشان دادن نام عملیات با هر درخواست GraphQL کار بزرگی انجام دادند و زندگی توسعه دهندگان را بسیار آسانتر کردند.