Bonjour,

Je travaille sur une APi pour une application de tracking/reseau social. J'offre la possibilité aux utilisateurs de commenter les parcours.
Mon "problème" surviens pour la requête qui récupère les commentaires pour un parcours donné, j'arrive à retourner une réponse qui ressemble à ça:

[
  {
    "id": 42,
    "course_id": 1,
    "user_id": 55472346
    "content": "lorem ipsum dolor sit amet ,
    "created_at": "3208-05-01T09:33:08.394Z",
    "updated_at": "2939-01-21T15:12:37.559Z",

  }
]

Dans l'optique de réduire le nombre de requètes de la part des clients (vu qu'il y a une application mobile) je souhaiterais plutôt renvoyer quelquechose comme ceci

[
  {
    "id": 42,
    "course_id": 1,
    "content": "lorem ipsum dolor sit amet ,
    "created_at": "3208-05-01T09:33:08.394Z",
    "updated_at": "2939-01-21T15:12:37.559Z",
    "user": {
      "id": 55472346,
      "firstname": "john",
      "lastname": "doe",
      "email": john@doe.ninja
    }
  }
]

Le soucis c'est que je ne vois pas comment faire ça de manière propre (en 1 seule requête). J'ai fait quelque recherches mais ça n'a pas donné grand chose, si quelqu'un a une proposition je serais vraiment intéressé de la lire :).

En vous souhaitant une bonne journée/soirée,
Cordialement,
TD

2 réponses


TransientDev
Auteur
Réponse acceptée

Bonjour,
merci d'avoir pris le temps de répondre :). Pour le moment je n'utilise pas de gem pour mon api mais je ne connaissait pas grape mais ça pourrait être interessant à utiliser (pour une éventuelle v2 ^^).
Après quelques heures de recherche j'ai finalement décidé d'opter pour la modification de la méthode as_json dans le modèle, comme ceci:

    def as_json(options={})
        super(:except => [:user_id],
              :include => {
                :user => {:only => [:id, :email, :firstname, :lastname]}
              }
        )
    end

Après je crois que la gem active_model_serializers permet de faire quelquechose de bien (comme dans ce post ) mais vu le manque de temps je préfère la méthode simple :D.

Encore merci pour ton temps,
TD

PS: pour le format du contenu je préfère mettre le user dans l'object comment car l'url est destinée à retourner une liste de commentaire pour un parcours donné

Hello,
Pour commencer tu utilise une gem pour ton api ? si non , regarde du côté de grape elle propose pas mal de chose et tu pourra formater des réponse comme tu le veut.

Pour ma part j'aurais construire de cette manière mais sa reste ma vision ;)

    [
        {
            "id": 55472346,
            "firstname": "john",
            "lastname": "doe",
            "email": john@doe.ninja,
            "comments":{
                 "id": 42,
                "course_id": 1,
                "content": "lorem ipsum dolor sit amet ,
                "created_at": "3208-05-01T09:33:08.394Z",
            }
        }
    ]