RAMLでいくつかのRESTドキュメントを書いていますが、私は立ち往生しています。RAML:パラメータAのORパラメータを要求する方法B
私の問題: - 私は、パラメータを取ることができ、検索に使用するGETリクエスト「ID」または(排他的または)「参照」を持っています。 のいずれか1つだけがである必要があります。
「このパラメータは必須です」とはわかっていますが、「これらのパラメータの1つが必要です」とはどういうふうに言わないのですか?それも可能ですか?
RAMLでいくつかのRESTドキュメントを書いていますが、私は立ち往生しています。RAML:パラメータAのORパラメータを要求する方法B
私の問題: - 私は、パラメータを取ることができ、検索に使用するGETリクエスト「ID」または(排他的または)「参照」を持っています。 のいずれか1つだけがである必要があります。
「このパラメータは必須です」とはわかっていますが、「これらのパラメータの1つが必要です」とはどういうふうに言わないのですか?それも可能ですか?
RAML 1.0で書かれた次の例では、Url
とFile
に2つのオブジェクトタイプを定義し、次いでext
でUrl
OR File
を必要とする他のオブジェクトItem
を作成します。 (現在検証している)インクルードされたサンプルを変更すると、そのプロパティがいずれかの定義に従わない場合に失敗することがわかります。希望が助けてくれる!他の質問があればLMK、私は最善を尽くします。
[編集:ちょうど私があなたの問題を今見ていると思います。should_fail
という名前の最後の例(この例ではそれぞれのタイプの1つが一緒になっています)が有効であり、検証に失敗します。]
[更新:OK]これを行うにはちょっとした方法がありました。検証中に最後の例を失敗したの下に更新されたコードを参照して、プロパティだけが表示されているはずのオブジェクトでmaxProperties: 1
を使用してください。] RAML 0.8で
#%RAML 1.0
types:
Url:
properties:
url:
type: string
example: http://www.cats.com/kittens.jpg
description: |
The url to ingest.
File:
properties:
filename:
type: string
example: kittens.jpg
description: |
Name of the file that will be uploaded.
Item:
description: |
An example of a allowing multiple types yet requiring
one AND ONLY one of two possible types using RAML 1.0
properties:
ext:
maxProperties: 1
type: File | Url
examples:
file_example:
content:
ext:
filename: video.mp4
url_example:
content:
ext:
url: http://heres.a.url.com/asset.jpg
should_fail:
content:
ext:
url: http://heres.a.url.com/asset.jpg
filename: video.mp4
あなたが唯一のパラメータでqueryParameters
を記述することはできません。
RAML 1.0ではこれを行うことができます。 Typeを記述するには、jsonschemaでoneOfを使用する必要があります。 queryParameters
はこのタイプを使用する必要があります。例:
api.raml
#%RAML 1.0
title: AUTH microservice
mediaType: application/json
protocols: [HTTPS]
types:
- example: !include schemas/example.json
/example:
get:
queryParameters:
type: example
スキーマ/ example.json
{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"id": "file://schemas/credentials.json",
"oneOf": [
{
"properties": {"key1": {"type": "string"}},
"additionalProperties": false
},
{
"properties": {"key2": {"type": "string"}},
"additionalProperties": false
}
]
}
また、あなたがuriParameters
を使用することができます。おそらくそれはあなたの場合に役立ちます。
#%RAML 0.8
title: API Using media type in the URL
version: v1
/users{mediaTypeExtension}:
uriParameters:
mediaTypeExtension:
enum: [ .json, .xml ]
description: Use .json to specify application/json or .xml to specify text/xml
私は同じ問題がありました。ユーザーは、テキスト入力またはファイル入力のいずれかを提供できますが、両方を提供することはできません。
両方ともフィールドが異なり、フィールド名から要求タイプを検出します。すなわち、要求に[ファイルとパラメータ]がある場合、それはFileInputです。リクエストに[texts and parameters]がある場合、それはTextInputです。同じ要求内でテキストとファイルの両方を提供することはできません。
私はunionプロパティを使用しました。 CatAndDogの例を Raml 200 documentationでご覧ください。 タイプを次のように定義することができます。
types:
FileInput:
properties:
parameters:
type: Parameters
description: (...)
files:
type: ArchiveCollection | FileCollection
description: (...)
TextInput:
properties:
parameters:
type: Parameters
description: (...)
texts:
type: TextCollection
description: (...)
その後、私のPOSTでリクエストボディ:ボディに
/your_route:
post:
body:
multipart/form-data:
type: TextInput | FileInput
フィールドはTextInputコントロールやFileInputクラスのタイプのいずれかで定義されています。
ありがとうございます。私はRAML 1.0のタイプに慣れていません(私は今までRAML 0.8を使用していました)。私はそれを読んで、あなたの例をうまく解釈できることを確かめます。 – firetonton
歓迎します。本質的に 'schema'フィールドは廃止され、' type'はそれを置き換えるフィールドです。 docs [here](https://github.com/raml-org/raml-spec/blob/raml-10/versions/raml-10/raml-10.md#type-declarations)を参照してください。 – jfunk