J'ai trouvé l'application iOS de Reddit meilleure que la version Web, j'ai donc pensé à vérifier la rapidité avec laquelle elle charge les données. Voici le démontage de l'application iOS de Reddit.
Voici quelques points saillants :
Voici le démontage détaillé des appels d'API. J'ai utilisé l'application de bureau de Requestly pour intercepter l'application iOS de Reddit, les instructions de configuration sont fournies ici .
L'application Reddit est créée avec
La principale question que je me posais était de savoir comment l'application fonctionnait si rapidement. La réponse a été trouvée en vérifiant la réponse de l'API FeedPostDetailsByIds . Cette API est appelée sur l'écran d'accueil avec les identifiants des publications affichées et est accompagnée d'informations détaillées qui s'affichent après avoir cliqué sur la publication. Ce préchargement des publications les plus populaires a permis d'afficher instantanément l'écran des détails de la publication sans aucun chargeur.
Les requêtes GraphQL se composent des données et de la structure de la réponse requise. Le nom de l'opération est généralement facultatif. La plupart des API Reddit n'ont que des noms d'opération dans les requêtes et les variables ne sont disponibles que lorsqu'il existe des variables/filtres à l'écran comme un flux avec des options de publication populaires et récentes.
Cela donne moins de contrôle aux développeurs front-end pour apporter des modifications de manière indépendante, mais plus de contrôle sur l'utilisation abusive des API pour récupérer des données inutiles après tout son API orientée utilisateur.
Il est difficile d'exécuter des expériences sur des applications iOS natives. Il faut des redéploiements pour activer ou désactiver les expériences, mais Reddit a configuré l'application de manière à ce que les expériences puissent être contrôlées à distance. Toutes les expériences sont chargées dans une API avec leurs valeurs et leurs statuts. L'application active automatiquement la variante de l'expérience qui lui a été attribuée.
Avec autant d'utilisateurs, d'expériences et de fonctionnalités, il est préférable de les contrôler à distance. Reddit fait un excellent travail en contrôlant ces fonctionnalités à distance.
À chaque lancement de l'application, celle-ci appelle une API de configuration pour charger plus de 400 variables de configuration. Sur la base de ces variables, elle affiche différentes fonctionnalités et variantes de fonctionnalités.
L'API avec le nom d'opération GetTopKarmaSubreddits
obtient la liste des meilleurs subreddits avec les points de karma gagnés dans chacun. Cette API révèle le nombre de commentaires et de karma de publication que nous avons gagnés grâce à notre activité dans chaque subreddit. Je n'ai jamais pu trouver ces informations dans l'interface utilisateur Web et mobile de Reddit.
En lisant les API pour savoir quel type de données elles apportent, j'ai découvert que l'API SubredditFeedElements
charge le flux du sous-reddit sélectionné, mais qu'à chaque publication, elle contient un JSON imbriqué d'informations détaillées sur le sous-reddit. Ces informations sont redondantes et peuvent être supprimées pour réduire la charge réseau de l'API et améliorer encore ses performances.
Remarque : l'API SubredditFeedElements
est désormais remplacée par l'API SubredditFeedSdui
et le problème est résolu.
J'ai essayé d'utiliser ChatGPT pour obtenir des informations sur les API. J'ai donc créé un fichier avec toutes les API avec leur boucle et leurs réponses. J'ai téléchargé ce fichier sur un CustomGPT afin de pouvoir placer n'importe quel type de requête. Il a donné des informations évidentes, comme le type d'utilisation qu'une API pourrait avoir et la structure de la réponse, mais il y avait beaucoup d'hallucinations, probablement à cause du grand nombre d'API ou parce que je ne suis pas un expert en matière d'invite. Quelques-unes des informations fournies par l'IA :
GetAllExperimentVariants
— De nombreuses expériences ont des noms de « variantes » spécifiques, notamment des options telles que enabled
, variant_1
, control_model
et one_feed_ph_bridge_new_users
. Cette segmentation suggère que Reddit teste des fonctionnalités sur des segments d'utilisateurs particuliers pour déterminer leur impact. Par exemple, l'expérience d2x_avatar_in_comments_loggedin
comporte deux variantes, loggedin
et loggedout
, qui testent potentiellement la fonctionnalité en fonction de l'état d'authentification de l'utilisateur.GetAllExperimentVariants
— Les expériences incluent hybrid_video_rollout_android_v2
, active_sales
et gql_google_maps_integration
, qui pointent vers une large gamme de tests de fonctionnalités couvrant la fonctionnalité vidéo, les placements d'annonces, les améliorations de l'interface utilisateur et les intégrations tiercesGetAccountDetails
— La réponse de l'API contient divers champs détaillant l'état du compte de l'utilisateur, tels que isSubredditCreationAllowed
, isNameEditable
, isPasswordSet
et l'état de modérateur de l'utilisateur. En outre, elle inclut suspensionExpiresAt
et isSuspended
, qui indiquent si un compte est actuellement suspendu ou restreintVoici la liste des API GraphQL que j'ai étudiées pour comprendre le fonctionnement de Reddit. Il y avait également d'autres API comme l'authentification, la création de rapports, etc. Je ne les ai pas incluses dans cette liste.
Écran | API GraphQL | Description |
---|---|---|
Maison | Obtenir toutes les configurations dynamiques | Charge plus de 400 paramètres de configuration en fonction des différentes fonctionnalités de l'application. La configuration est au format clé-valeur typique avec le type de valeur qui peut être un JSON, un float, une chaîne, etc. |
| Obtenir toutes les variantes d'expérience | La requête contient des informations sur l'application et l'appareil pour attribuer des expériences destinées à l'appareil et à la version de l'application. La réponse contient une liste de toutes les expériences avec l'ID, le nom de l'expérience, la version et le statut. |
| Obtenir un compte | Charge tous les détails de l'utilisateur connecté. |
| AccueilFeedSdui | Charge les premiers messages avec un minimum de détails à afficher sur la page d'accueil. |
| FeedPostDetailsByIds | Précharge les publications à l'aide d'identifiants avec tous les détails, au cas où un utilisateur clique sur la publication. |
| DiscoverBarRecommandations | Découvrez les données de la barre. |
| Abonnement UserPremium | Données relatives à l'abonnement premium de l'utilisateur |
| Obtenir l'éligibilité de l'utilisateur | Obtient l'éligibilité publicitaire de l'utilisateur et ses préférences. |
| Nombre de badges | Informations sur les badges gagnés par l'utilisateur. |
| | |
Page de sous-reddit | Canaux Subreddit | Charge tous les détails de base sur la communauté comme la description, les icônes, les compteurs, les types de publication autorisés et les couleurs. |
| SubredditTaxonomieSujets | Charge la catégorie de la communauté et un texte d'affichage comme si je charge la communauté r/software, il affichera #20 dans Logiciels et applications. |
| EstInvitePending | Comme son nom l'indique, vérifiez s'il y a une invitation en attente, mais vous ne savez pas exactement quelle invitation. |
| Canaux Subreddit | Charge les canaux de discussion du sous-reddit, j'ai vérifié de nombreux sous-reddits mais je n'en ai trouvé aucun. |
| Redditeurs bloqués | Apporte des données si l'utilisateur est bloqué. |
| Obtenir des modérateurs | Obtient la liste des mods. |
| RécupérerStructuredStyleAndWidgets | Cette API apporte des informations sur le style, les règles et les détails de la communauté. |
| FetchRelatedRecommandations de la communauté | Cette API rassemble des communautés associées. |
| SubredditMise en sourdine | Vérifie si le sous-reddit est désactivé. |
| Éléments de flux de subreddit | Charge le flux du sous-reddit. Il prend en compte les filtres et les options de mise en page sélectionnés pour le sous-reddit. Il récupère tous les détails sur les publications à afficher dans le flux. |
| PostInfoByIdComments | Cette demande précharge uniquement les commentaires du premier message. |
| | |
Page de publication | Obtenir le statut des emojis personnalisés | Cette API a été appelée avec l'ID du sous-reddit et charge le statut des émojis personnalisés sur le sous-reddit. La raison pour laquelle cette API est appelée n'est pas très claire, mais je l'ai vu à de nombreuses reprises. La réponse était |
| Obtenir le statut SubredditAchievementFlairs | Similaire au statut emoji, il prend l'identifiant du sous-reddit et obtient une réponse du type isEnabled: false . Le but de cette opération ne m'est pas clair. |
| PostInfoByIdComments | Cette API est utilisée pour charger les commentaires de la publication en utilisant l'ID de publication transmis dans la requête. |
| CommentairesPageAnnonces | Charge l'annonce juste au dessus des commentaires. |
| | |
Page de profil | RedditorParNom | Charge les détails du profil de l'utilisateur connecté. |
| Paramètres de PostSet | Nombre de messages à charger. |
| Sous-reddits GetTopKarma | Obtenez la liste des meilleurs subreddits avec des points de karma sur chaque communauté, cette API révèle combien de commentaires et de karma de publication nous avons gagné grâce à notre activité dans chaque sous-reddit. |
| Flux de profils d'utilisateurs | Le flux du profil utilisateur contenant des commentaires et des publications. |
| Trophées UserPublic | Liste des réalisations et trophées gagnés par le nom d'utilisateur passé dans la demande avec identifiant, nom et image à afficher. |
| Profil de basculement migré | Détails sur le profil de pourboire, je n'ai pas beaucoup utilisé cette fonctionnalité. Il affichait un solde de 0 sur mon profil 😄. |
J’aimerais souligner quelques points en conclusion de cette expérience de démolition.