Nur bestimmte Felder aus der API GET-Antwort zurückgeben

Fortsetzung der Diskussion aus Discourse API Documentation:

Hallo

Ich konnte keine Antwort auf diese Frage finden, bitte. Weiß jemand, ob es möglich ist, anzugeben, dass die Discourse API-Antwort auf eine GET-Anfrage nur das angeforderte Feld zurückgibt?

Zum Beispiel gibt die GET-Anfrage zum Auflisten von Gruppenmitgliedern (https://{defaultHost}/groups/{id}/members.json) Folgendes zurück:

 {
   "members": [
     {
       "id": 0,
       "username": "string",
       "name": "string",
       "avatar_template": "string",
       "title": "string",
       "last_posted_at": "string",
       "last_seen_at": "string",
       "added_at": "string",
       "timezone": "string"
     }
   ],
   "owners": [
     {
       "id": 0,
       "username": "string",
       "name": "string",
       "avatar_template": "string",
       "title": "string",
       "last_posted_at": "string",
       "last_seen_at": "string",
       "added_at": "string",
       "timezone": "string"
     }
   ],
   "meta": {
     "total": 0,
     "limit": 0,
     "offset": 0
   }
 }

Gibt es eine Möglichkeit, die Antwort so zu gestalten, dass nur ein bestimmtes Feld zurückgegeben wird? Zum Beispiel, um nur die Benutzernamen der Mitglieder zurückzugeben?

{
  "members": [
    {
       "username": "string"
    }
  ]
}

Ich weiß, dass es möglich ist, die gesamte Antwort abzurufen und dann mit Code den JSON und die Arrays zu filtern, um einen bestimmten Wert zu erhalten; ich möchte jedoch, dass die Anfrage den spezifischen Wert zurückgibt. Ist das möglich?

Danke!

Tolle Frage, aber nein, das ist keine Option. Es gibt nichts in der Kernanwendung, das auf Parameter zum Filtern hört.

Ich denke, es wäre am besten, die Ergebnisse entweder mit einem Tool wie jq auf der Befehlszeile herauszufiltern oder die Programmiersprache zu verwenden, mit der Sie die API-Anfragen stellen.

Wenn dies tatsächlich eine zwingende Anforderung ist, gibt es zwei Möglichkeiten. Sie könnten das Data Explorer-Plugin mit einer Abfrage verwenden, die nur die benötigten Daten zurückgibt, und dann eine API-Anfrage an diese Abfrage stellen. Eine weitere Alternative wäre die Erstellung eines benutzerdefinierten Plugins, für das Sie eine neue Route und einen neuen Controller erstellen, der nur die benötigten Daten zurückgibt.

Fantastisch! Ich glaube, das wird sehr helfen. :folded_hands: Vielen Dank!