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/10_optimization.adoc
+17-17Lines changed: 17 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@ Bienvenue dans le dernier chapitre du livre. Le chemin a été long mais vous n
6
6
* la pagination
7
7
* la mise en cache
8
8
9
-
J’essaierai d’aller aussi loin que possible en essayant de couvrir certains scénarios courants. J’espère que ces scénario vous serons utiles pour certains de vos projets.
9
+
J’essaierai d’aller aussi loin que possible en essayant de couvrir certains scénarios courants. J’espère que ces scénari vous serons utiles pour certains de vos projets.
10
10
11
11
Si vous commencez à lire à ce stade, vous voudrez probablement que le code fonctionne, vous pouvez le cloner comme ça:
12
12
@@ -24,7 +24,7 @@ $ git checkout -b chapter10
24
24
25
25
=== Mettre en conformité notre structure JSON avec celle de https://jsonapi.org/[JSON:API]
26
26
27
-
Comme je vous le dis depuis le début de ce livre, une partie importante et difficile lors de la création de votre API est de décider le format de sortie. Heureusement, certaines organisations ont déjà fait face à ce genre de problème et elles ont ainsi établies certaines conventions.
27
+
Comme je vous le dis depuis le début de ce livre, une partie importante et difficile lors de la création de votre API est de décider le format de sortie. Heureusement, certaines organisations ont déjà fait face à ce genre de problème et elles ont ainsi établi certaines conventions.
28
28
29
29
Une des convention les plus appliquée est très certainement https://jsonapi.org/[JSON:API]. Cette convention nous permettra d’aborder la pagination plus sereinement dans la prochaine section.
* `errors` qui doit contenir un tableau des erreurs qui sont survenues.
37
37
* `meta` qui contient un https://jsonapi.org/format/#document-meta[objet meta]
38
38
39
-
NOTE: Les clés `data` et `errors` ne doivent pas être présente en même temps et c’est logique puisque si une erreur survient nous ne devrions pas être en mesure de rendre des données correctes.
39
+
NOTE: Les clés `data` et `errors` ne doivent pas être présentes en même temps et c’est logique puisque si une erreur survient nous ne devrions pas être en mesure de rendre des données correctes.
40
40
41
41
Le contenu de la clé `data`est lui aussi assez stricte:
42
42
43
43
* il doit posséder une clé `type`qui décrit le type du modèle JSON (si c’est un article, un utilisateur, etc..)
44
-
* les proprités de l’objets doivent être placées dans une clé `attributes` et les undescore (`_`) sont remplacés par des tirets (`-`)
44
+
* les propriétés de l’objets doivent être placées dans une clé `attributes` et les undescore (`_`) sont remplacés par des tirets (`-`)
45
45
* les liaisons de l’objets doivent être placées dans une clé `relationships`
46
46
47
-
Cela risque de nous faire pas mal de changement puisque nous n’avons implémenté aucune de ses règles. Ne vous inquiétéz pas, nous avons mis en place des tests unitaires afin de nous assurer qu’il n’y aura pas de régression. Commençons doc par les mettre à jour
47
+
Cela risque de nous faire pas mal de changements puisque nous n’avons implémenté aucune de ces règles. Ne vous inquiétez pas, nous avons mis en place des tests unitaires afin de nous assurer qu’il n’y aura pas de régression. Commençons donc par les mettre à jour
48
48
49
49
==== Les utilisateurs
50
50
@@ -69,7 +69,7 @@ RSpec.describe Api::V1::UsersController, type: :controller do
69
69
end
70
70
----
71
71
72
-
Nous devons mettre à jour les emplacement. Voici le fichier complet
72
+
Nous devons mettre à jour les emplacements. Voici le fichier complet
73
73
74
74
[source,ruby]
75
75
.spec/controllers/api/v1/users_controller_spec.rb
@@ -139,7 +139,7 @@ NOTE: Rappelez vos bien que dans les spécification JSON:API, les undescore (`_`
139
139
140
140
==== Les commandes
141
141
142
-
Pour les commandes, il y a une petite spécifité car pour récupérer l’utilisateur associé, nous devons passer par la clé `:relationships`. En dehors de ça, le principe reste iddentique:
142
+
Pour les commandes, il y a une petite spécifité car pour récupérer l’utilisateur associé, nous devons passer par la clé `:relationships`. En dehors de ça, le principe reste identique:
Depuis le début, afin de sérialiser nos modèles, nous vons utilisé _Active Model Serializer_. Heureusement pour nous, cette librairie propose plusieurs *adaptateurs*. Les adapateurs sont en quelques sorte des modèles de JSON à appliquer à tous nos sérialiseur. C’est parfait.
295
+
Depuis le début, afin de sérialiser nos modèles, nous avons utilisé _Active Model Serializer_. Heureusement pour nous, cette librairie propose plusieurs *adaptateurs*. Les adapateurs sont en quelques sorte des modèles de JSON à appliquer à tous nos sérialiseur. C’est parfait.
296
296
297
-
La https://github.com/rails-api/active_model_serializers/blob/v0.10.6/docs/general/adapters.md[documentation de _Active Model Serializer_] nous montre propose une liste des adaptateurs existants. Et, si vous voyez ou je veux en venir, il en existe une toute prête pour le modèle JSON:API! Pour le mettre en place, il suffit simplement d’activer l’adapter en créant le fichier suivant:
297
+
La https://github.com/rails-api/active_model_serializers/blob/v0.10.6/docs/general/adapters.md[documentation de _Active Model Serializer_] nous propose une liste des adaptateurs existants. Et, si vous voyez ou je veux en venir, il en existe une toute prête pour le modèle JSON:API! Pour le mettre en place, il suffit simplement d’activer l’adaptateur en créant le fichier suivant:
298
298
299
299
[source,ruby]
300
300
.config/initializers/activemodel_serializer.rb
301
301
----
302
302
ActiveModelSerializers.config.adapter = :json_api
303
303
----
304
304
305
-
Nous devons aussi indique le type de l’objet du serialiseur. _Active Model Serializer_ propose une méthode toute fate pour cela: `type`. L’implémentation est donc très facile:
305
+
Nous devons aussi indiquer le type de l’objet du serialiseur. _Active Model Serializer_ propose une méthode toute faite pour cela: `type`. L’implémentation est donc très facile:
306
306
307
307
[source,ruby]
308
308
.app/serializers/order_serializer.rb
@@ -331,7 +331,7 @@ class UserSerializer < ActiveModel::Serializer
331
331
end
332
332
----
333
333
334
-
Et c’est tout! Lançon maintenant *tous* nos tests pour voir s’ils passent:
334
+
Et c’est tout! Lançons maintenant *tous* nos tests pour voir s’ils passent:
335
335
336
336
[source,bash]
337
337
----
@@ -423,7 +423,7 @@ Finished in 2.12 seconds (files took 1.4 seconds to load)
423
423
103 examples, 0 failures
424
424
----
425
425
426
-
Et voilà le travail. Vu que nous sommes content de notre travail, faisons un _commit_:
426
+
Et voilà le travail. Vu que nous sommes contents de notre travail, faisons un _commit_:
Une stratégie très commune pour optimiser la récupération d’enregistrements dans une base de données est de charger seulement une quantité limité en les paginant. Si vous êtes familier avec cette technique, vous savez qu’avec Rails c’est vraiment très facile à mettre en place avec des gemmes telles que https://github.com/mislav/will_paginate[will_paginate] ou https://github.com/kaminari/kaminari[kaminari].
436
+
Une stratégie très commune pour optimiser la récupération d’enregistrements dans une base de données est de charger seulement une quantité limitée en les paginant. Si vous êtes familiers avec cette technique, vous savez qu’avec Rails c’est vraiment très facile à mettre en place avec des gemmes telles que https://github.com/mislav/will_paginate[will_paginate] ou https://github.com/kaminari/kaminari[kaminari].
437
437
438
438
La seule partie délicate ici est de savoir comment gérer la sortie JSON pour donner assez d’informations au client sur la façon dont le tableau est paginé. Dans la section précédente, j’ai partagé quelques ressources sur les pratiques que j’allais suivre ici. L’une d’entre elles était http://jsonapi.org/ qui est une page incontournable des signets.
439
439
@@ -511,7 +511,7 @@ RSpec.describe Api::V1::ProductsController, type: :controller do
511
511
end
512
512
----
513
513
514
-
Le test que nous venons d’ajouter devrait échouer or, si nous exécutons les tests, deux tests échouent. Cela veux dire que nous avons cassé quelque chose d’autre:
514
+
Le test que nous venons d’ajouter devrait échouer or, si nous exécutons les tests, deux tests échouent. Cela veut dire que nous avons cassé quelque chose d’autre:
515
515
516
516
[source,bash]
517
517
----
@@ -616,7 +616,7 @@ $ git commit -m "Adds pagination for the products index action to optimize respo
616
616
617
617
==== Liste des commandes
618
618
619
-
Maintenant, il est temps de faire exactement la même chose pour la route de la liste des commandes. Cela devrait être très facile à mettre en œuvre. Mais d’abord, ajoutons quelques test au fichier `orders_controller_spec.rb`:
619
+
Maintenant, il est temps de faire exactement la même chose pour la route de la liste des commandes. Cela devrait être très facile à mettre en œuvre. Mais d’abord, ajoutons quelques tests au fichier `orders_controller_spec.rb`:
Nous sommes donc passé de 174 ms à 21 ms. L’amélioration est donc énorme! _Comittons_ une dernière fois nos changements.
921
+
Nous sommes donc passés de 174 ms à 21 ms. L’amélioration est donc énorme! _Comittons_ une dernière fois nos changements.
922
922
923
923
[source,ruby]
924
924
----
@@ -929,4 +929,4 @@ $ git commit -am "Adds caching for the serializers"
929
929
930
930
Si vous arrivez à ce point, cela signifie que vous en avez fini avec le livre. Bon travail! Vous venez de devenir un grand développeur API Rails, c’est sûr.
931
931
932
-
Merci d’avoir emmené cette grande aventure avec moi, j’espère que vous avez apprécié le voyage autant que moi. On devrait prendre une bière un de ces jours.
932
+
Merci d’avoir traversé cette grande aventure avec moi, j’espère que vous avez apprécié le voyage autant que moi. On devrait prendre une bière un de ces jours.
0 commit comments