2016-03-21 11 views
1

Ich habe 2 PUT Methoden in meinem Rest API mit dem gleichen Einstiegspunkt.RAML gleiche Methode Überladung Dokumentation

Methode # 1: PUT/videos/{videoId} mit Typ multipart/form-data, die das Video ersetzen wird.

Methode 2: PUT/videos/{videoId}? Title = newTitle & description = newDescription, das den Titel und die Beschreibung des Videos aktualisiert.

Wenn ich versuche, es zu dokumentieren, wie folgende erhalte ich „Methode bereits erklärt:‚setzen‘“

put: 
    description: replace a video with a new video 
    body: 
    multipart/form-data: 
     formParameters: 
      file: 
      description: a video file to replace the current video file 
      required: true 
      type: file 
    responses: 
    200: 
     body: 
      application/json: 
      schema: !include video.schema 
      example: !include video.example 
     description: Returns the video object. 
put: 
    description: update video's fields 
    queryParameters: 
    title: 
     description: video's title 
     required: false 
     type: string 
    description: 
     description: video's description 
     required: false 
     type: string 
    responses: 
    200: 
     body: 
     application/json: 
      schema: !include video.schema 
      example: !include video.example 

Haben Sie Vorschläge, wie diesen Fall zu dokumentieren?

Danke!

+0

Wie @farolfo es unten sagt, gibt es ein Design-Problem. Wenn überhaupt, verstößt der obige Ansatz gegen das Konsistenzprinzip: Warum sollte ein Teil der Videoeinheit mit Abfrageparametern aktualisiert werden und andere mit einer mehrteiligen/Formdateneinheit. Verwenden Sie multipart/form-data für alle Fälle. Dies wird Ihren API-Benutzern die Arbeit erleichtern. –

Antwort

1

Es ist keine gute Vorgehensweise, die Daten zur Änderung der Abfrageparameter zu senden, wenn eine PUT-Anforderung ausgeführt wird. Statt dessen würde ich Ihre zweite PUT für einen Patch mit einem Content-Type ändern: application/json als die Art des Körpers, und als Inhalt für die Nutzlast würde ich

{ title: "newTitle", description: "newDescription" } 

Damit senden, Ihre API würde alles erreichen, was du erreichen willst (soweit ich von deiner Frage komme).

Beachten Sie, dass ich dies für PATCH geändert haben, weil in einem PATCH ist nicht erforderlich, dass Sie das Loch Json mit Daten senden. Sie könnten später nur einen PATCH senden, um die Beschreibung zu ändern, wenn Ihre API-Implementierung dies unterstützt. In einer PUT-Anfrage sollten Sie das Loch json senden.

+0

Wenn Sie sich für 'PATCH' entscheiden, sollten Sie RFC-6902 alias JSON Patch folgen http://jsonpatch.com/ –