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!

1 „Gefällt mir“

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.

1 „Gefällt mir“

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

1 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.