You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: fr/07_improve_json.adoc
+10-10Lines changed: 10 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
Dans le chapitre précédent, nous avons ajouté les produits à l’application et construit tous les routes nécessaires. Nous avons également associé un produit à un utilisateur et restreint certaines des actions de `products_controller`.
4
4
5
-
Maintenant, vous devriez être satisfait de tout ce travail. Mais nous avons encore du pain sur la planche. Actuellement, nous avons une sortie JSON qui n’est pas parfaite. La sortie JSON ressemble à celle-ci:
5
+
Maintenant, vous devriez être satisfaits de tout ce travail. Mais nous avons encore du pain sur la planche. Actuellement, nous avons une sortie JSON qui n’est pas parfaite. La sortie JSON ressemble à celle-ci:
6
6
7
7
[source,json]
8
8
----
@@ -64,7 +64,7 @@ Ajoutez la ligne suivante à votre `Gemfile`:
64
64
gem 'active_model_serializers', '~> 0.10.8'
65
65
----
66
66
67
-
Exécutez la commande d’installation du paquet pour installer la gemme… et c’est tout! Vous devriez être prêt à continuer avec ce tutoriel.
67
+
Exécutez la commande d’installation du paquet pour installer la gemme… et c’est tout! Vous devriez être prêts à continuer avec ce tutoriel.
68
68
69
69
=== Sérialiser l’utilisateur
70
70
@@ -129,7 +129,7 @@ Nous pouvons également tester les objets du sérialiseur, comme indiqué dans l
129
129
130
130
=== Sérialiser les produits
131
131
132
-
Maintenant que nous comprenons comment fonctionne la gemme de sérialisation, il est temps de personnaliser la sortie des produits. La première étape et comme pour l’utilisateur, nous avons besoin d’un sérialiseur de produit, alors faisons-le:
132
+
Maintenant que nous comprenons comment fonctionne la gemme de sérialisation, il est temps de personnaliser la sortie des produits. La première étape est identique à celle pour l’utilisateur, nous avons besoin d’un sérialiseur de produit, alors faisons-le:
133
133
134
134
[source,bash]
135
135
----
@@ -161,7 +161,7 @@ $ git commit -a "Adds product serializer for custom json output"
161
161
162
162
Nous avons travaillé avec des sérialiseurs et vous remarquerez peut-être que c’est très simple. Dans certains cas, la décision difficile est de savoir comment nommer vos routes ou comment structurer la sortie JSON afin que votre solution soit pérenne.
163
163
164
-
Lorsque vous travaillez avec des associations entre les modèles sur une API, il existe de nombreuses approches que vous pouvez prendre. Ici, je vais expliquer ce que j’ai trouvé et ce fonctionne pour moi. Ce n’est pas la seule manière de faire, je vous laisse juger si elle vous convient. Dans cette section, nous allons étendre notre API pour gérer l’association produit/utilisateur. Je vais aussi vous expliquer certaines des erreurs courantes dans lesquels vous pouvez tomber.
164
+
Lorsque vous travaillez avec des associations entre les modèles sur une API, il existe de nombreuses approches que vous pouvez prendre. Ici, je vais expliquer ce que j’ai trouvé et ce qui fonctionne pour moi. Ce n’est pas la seule manière de faire, je vous laisse juger si elle vous convient. Dans cette section, nous allons étendre notre API pour gérer l’association produit/utilisateur. Je vais aussi vous expliquer certaines des erreurs courantes dans lesquels vous pouvez tomber.
165
165
166
166
Pour résumer, nous avons une association de type `has_many` entre l’utilisateur et le modèle de produit.
167
167
@@ -183,7 +183,7 @@ class Product < ApplicationRecord
183
183
end
184
184
----
185
185
186
-
C’est une bonne idée d’intégrer des modèles dans d’autres modèles dans d’autres modèle car cela évite au client de l’API d’exécuter plusieurs requêtes. Cela rendra la sortie un peu plus lourde mais lorsque vous récupérez de nombreux enregistrements, cela peut vous éviter un énorme goulet d’étranglement.
186
+
C’est une bonne idée d’intégrer des modèles dans d’autres modèles dans d’autres modèles car cela évite au client de l’API d’exécuter plusieurs requêtes. Cela rendra la sortie un peu plus lourde mais lorsque vous récupérez de nombreux enregistrements, cela peut vous éviter un énorme goulet d’étranglement.
187
187
188
188
=== Cas d’utilisation d’un objet incorporé dans une association
189
189
@@ -283,7 +283,7 @@ Maintenant, vous vous demandez peut-être si vous devriez intégrer les produits
283
283
284
284
Mais ne vous inquiétez pas, tout n’est pas perdu, nous pouvons facilement résoudre ce problème en intégrant seulement les identifiants des produits dans l’utilisateur. Cela donnera à votre API une meilleure performance et cela évitera de charger des données supplémentaires. Dans cette section, nous allons donc étendre notre route de l’index des produits pour traiter un paramètre `product_ids` et formater la sortie JSON en conséquence.
285
285
286
-
Tout d’abord, nous nous assurons que le `product_ids` qu’il fait partie de l’objet sérialisé de l’utilisateur:
286
+
Tout d’abord, nous nous assurons que le `product_ids` fait partie de l’objet sérialisé de l’utilisateur:
287
287
288
288
[source,ruby]
289
289
.spec/controllers/api/v1/users_controller_spec.rb
@@ -374,7 +374,7 @@ RSpec.describe Api::V1::ProductsController, type: :controller do
374
374
end
375
375
----
376
376
377
-
Comme vous pouvez le voir, nous venons d’envelopper l’action index dans deux contextes séparés: l’un qui recevra les `product_ids` et l’autre l’ancien que nous avions écris. Ajoutons le code nécessaire pour faire passer les tests:
377
+
Comme vous pouvez le voir, nous venons d’envelopper l’action index dans deux contextes séparés: l’un qui recevra les `product_ids` et l’autre l’ancien que nous avions écrit. Ajoutons le code nécessaire pour faire passer les tests:
378
378
379
379
[source,ruby]
380
380
.app/controllers/api/v1/products_controller.rb
@@ -412,7 +412,7 @@ $ git commit -am "Embeds the products_ids into the user serialiser and fetches t
412
412
413
413
Dans cette dernière section, nous continuerons à renforcer l’action `Products#index` en mettant en place un mécanisme de recherche très simple pour permettre à n’importe quel client de filtrer les résultats. Cette section est facultative car elle n’aura aucun impact sur les modules de l’application. Mais si vous voulez pratiquer davantage avec le TDD, je vous recommande de compléter cette dernière étape.
414
414
415
-
J’utilise https://github.com/activerecord-hackery/ransack[Ransack] pour construire des formulaires de recherche avancée extrêmement rapidement. Mais ici, comme le but est dapprendre et que la recherche que nous allons effectuer est très simple, je pense que nous pouvons construire un moteur de recherche à partir de zéro. Nous devons simplement considérer les critères par lesquels nous allons filtrer les attributs. Accrochez-vous bien à vos sièges, ça va être un voyage difficile.
415
+
J’utilise https://github.com/activerecord-hackery/ransack[Ransack] pour construire des formulaires de recherche avancée extrêmement rapidement. Mais ici, comme le but est d'apprendre et que la recherche que nous allons effectuer est très simple, je pense que nous pouvons construire un moteur de recherche à partir de zéro. Nous devons simplement considérer les critères par lesquels nous allons filtrer les attributs. Accrochez-vous bien à vos sièges, ça va être un voyage difficile.
416
416
417
417
Nous filtrerons donc les produits selon les critères suivants:
418
418
@@ -424,7 +424,7 @@ Cela peut sembler court et facile, mais croyez-moi, cela vous donnera mal à la
424
424
425
425
==== Le mot-clé by
426
426
427
-
Nous allons créer un _scope_ pour trouver les enregistrements qui correspondent à un motif particulier de caractères. Appelons-le `filter_by_title`. Ajoutons d’abord quelques tests:
427
+
Nous allons créer un _scope_ pour trouver les enregistrements qui correspondent à un motif particulier de caractère. Appelons-le `filter_by_title`. Ajoutons d’abord quelques tests:
428
428
429
429
[source,ruby]
430
430
.spec/models/product_spec.rb
@@ -575,7 +575,7 @@ Finished in 0.18008 seconds (files took 0.6544 seconds to load)
575
575
13 examples, 0 failures
576
576
----
577
577
578
-
Comme vous pouvez le voir, nous n’avons pas eu beaucoup de problèmes. Ajoutons simplement une autre _scope_ pour trier les enregistrements par date de dernière mise à jour. Dans le cas où le propriétaire des produits décide de mettre à jour certaines données, il veut toujours les trier par enregistrements les plus récents.
578
+
Comme vous pouvez le voir, nous n’avons pas eu beaucoup de problèmes. Ajoutons simplement une autre _scope_ pour trier les enregistrements par date de dernière mise à jour. Dans le cas où le propriétaire des produits décide de mettre à jour certaines données il voudra sûrement trier ses produits par date de création.
0 commit comments