2016-06-04 13 views
0

In der traditionellen REST-API, sollten wir unsere API wie folgt definieren:Mehrere get API in MEAN.IO (Express, Angular)

  • GET/api/Dinge -> erhalten alle
  • POST/api/Dinge -> erstellen
  • GET/api/Dinge /: id -> get one
  • PUT/api/Dinge /: id -> update
  • DELETE/api/Dinge /: id -> löschen

Wie soll ich einen anderen 'get one' Endpunkt für die Abfrage von Daten durch ein anderes Feld als ID definieren? Zum Beispiel:

  • GET/api/Dinge /: title -> bekommt man nach Titel (dies sicher funktioniert nicht, da die api nicht bekannt URL Parameternamen ist)

  • GET/api/Dinge/Titel /: Titel? dies gar nicht für mich arbeiten ..

  • GET/api/Dinge title = was auch immer (dies überhaupt nicht definiert werden kann, wenn ich dies in meinem index.js schreiben:.

    router.get ('? title = was auch immer', controller.getByTitle);

ich dieses:

SyntaxError: Invalid regular expression: /^?title=whatever\/?$/: Nothing to repeat 
    at RegExp (native) 
+0

Abfrageparameter verwenden? 'GET/api/Dinge? Title = was auch immer'. Aber solange Sie für die Benutzer klar dokumentieren, können Sie auswählen, was Sie wollen. – jonrsharpe

+0

Ich habe dieses Detail zu der Frage hinzugefügt – akcasoy

+0

Ist das Problem, dass Sie nicht wissen, welchen Endpunkt Sie angeben möchten, oder dass Sie nicht in der Lage sind, es zu implementieren? Ersteres ist meinungsbasiert, letzteres wäre mit einem [mcve] Thema. – jonrsharpe

Antwort

2

ID sollte eine eindeutige Kennung sein, eine ID, Sie eine Ressource höchstens zurückgeben sollte das ist.. warum ein URI wie GET /api/things/:id macht Sinn.

Für andere Eigenschaften, die eindeutig sein können oder nicht, können Sie mehrere Ergebnisse haben. Verwenden Sie daher den Endpunkt GET /api/things und übergeben Sie die Abfrageparameter: /api/things?title=mytitle.

app.get('/api/things', function (req, res) { 
    console.log(req.query.title); //mytitle 
    ThingModel.find({ 
     title: req.query.title  
    }, function (err, things) { 
     res.send(things); 
    }); 
}); 
+0

Ich habe gerade gemerkt, wie dumm die Frage ist:/Entschuldigung. Danke – akcasoy

+0

Ich habe gerade versucht dies, aber meine Anfrage erhalten sendet nicht die Parameter. Es sieht so aus: $ http.get ('/ api/sachen', {name: 'name'}), aber die aufgerufene URL ist immer noch "/ api/sachen". Wo kann ich habe Fehler – akcasoy

+0

Wickeln Sie Ihre Abfrage-Parameter in einem 'params' Objekt: $ http.get ('/ api/Dinge', { params: { Name: 'name' } }); – Komo