2017-03-20 7 views
0

Ich erstelle einen Webhook-Endpunkt für verschiedene Git-Server. Die Webhook-URL wird auf dem Git-Server konfiguriert und wird verwendet, um eine POST-Anfrage mit einem Body zu senden, der Metadaten zu einem Ereignis enthält (wie die Informationen zu einem Commit, nachdem ein Commit durchgeführt wurde). Der Inhalt der POST-Anfrage unterscheidet sich von einem Server zu einem anderen: Die Attribute und die Werte sind git-Provider-spezifisch.REST: Post-Endpunkt mit URL-Abfrageparameter und Body-Inhalt

Ich möchte die gleiche Endpunkt-URL verwenden, wenn es mit einem Abfrageparameter möglich ist, zu unterscheiden, mit welchem ​​git-Provider ich es zu tun habe. Mein Endpunkt wäre so etwas wie diese:

/repositories/commits?type={git_provider} 

Ein Beispiel für die Urls in Gitlab oder Atlassian Stash konfiguriert wird, sind:

/repositories/commits?type=stash 
/repositories/commits?type=gitlabs 

Das Problem ist, dass der Inhalt des Körpers POST-Anforderung wird unterschiedlich je nach Wert des Typs. Ist es so machbar? oder sollte ich unterschiedliche Endpunkte für jeden Typ erstellen, in diesem Fall habe ich mehrere Endpunkte, die je nach Git-Typ den Körper eines anderen Beitrags verarbeiten.

/stash/repositories/commits 
/gitlabs/repositories/commits 

einen einzelnen Endpunkt mit einem Abfrageparameter

Pro verwenden:

  • Respektierung die gleiche Hierarchie in anderen Endpunkt verwendet

Nachteile:

  • Abhängig vom Wert des Abfrageparameters wird die Art des Lesens des Hauptteils der Anfrage aufgrund der Namensgebung/Werte der Attribute unterschiedlich sein.
  • einen einzelnen Endpunkt mit einem Abfrageparameter verwenden

    Pro:

    • Jeder Endpunkt wird einfach sein und und wird einen festen Beitrag Körper

    werden Verarbeitung Con:

    • Die Hierarchie der neuen Endpunkte entspricht nicht der Hierarchie der vorhandenen Endpunkte.
    +1

    Diese Frage ist in erster Linie meinungsbezogen. Alle URL-Vorschläge in der Frage würden funktionieren - was getan werden sollte, hängt von persönlichen Vorlieben ab oder passt es in ein bestehendes Schema an, das in der Frage nicht erwähnt wird. – Sven

    +0

    Ich bearbeite die Frage, um weitere Details hinzuzufügen. –

    +0

    Wenn ich die Bearbeitung lese, würde ich sagen, dass dies meinungsbasiert ist. Sie haben das grundlegende Problem, verschiedene POST-Körper an verschiedene URLs zu senden. Es spielt keine Rolle, ob der Unterschied in der URL vor oder nach dem '?' Liegt - es ist anders. Wer sollte sich in deiner Frage darum kümmern? Wer wäre von dieser Entscheidung betroffen? – Sven

    Antwort

    1

    Obwohl ich noch nie mit den Git-APIs gearbeitet habe, erwarte ich, dass es mit den verschiedenen Git-Anbietern viele überlappende Eigenschaften geben wird. Jeder Anbieter könnte unterschiedliche Terminologie- oder Benennungsschemata verwenden, aber die tatsächlichen Daten selbst wären gleich. Daher würde ich empfehlen, eine einzelne Ressource zu verwenden, wobei die Abfragezeichenfolge unterscheidet, welcher Anbieter verwendet wird.

    Benennen Sie Ihre API-Eigenschaften in einer generischen Weise, die nicht zu eng an einen bestimmten Anbieter gebunden ist. Dann würden Sie den Namen der API-Eigenschaft in die providerspezifische Eigenschaft "übersetzen". Dadurch würden die verschiedenen Provider-Implementierungen vom API-Consumer ausgeblendet. Wenn Sie also einen neuen Provider hinzufügen oder ändern, ändert sich Ihre API nicht.