我有一个带有如下参数的开放 API 规范:
- name: platform
in: query
description: "Platform of the application"
required: true
schema:
type: string
enum:
- "desktop"
- "online"
Run Code Online (Sandbox Code Playgroud)
当我从 URL 获取“平台”参数时,它可以是这样的:
platform=online or
platform=ONLINE or
platform=Online or
platform=onLine or ... any other format
Run Code Online (Sandbox Code Playgroud)
但是当我要使用它时,它仅在参数全部为小写时才有效,例如"platform=online",显然要匹配枚举值。
如何使模式不区分大小写并理解所有类型的传递参数?
我想使用 AWS CDK 来定义 API 网关和 APIG 将代理到的 lambda。
OpenAPI 规范支持x-amazon-apigateway-integration对 Swagger 规范的自定义扩展(在此处详细说明),为此需要 lambda 的调用 URL。如果 lambda 定义在与 API 相同的堆栈中,我在 OpenAPI 规范中看不到如何提供它。我能想到的最好的方法是使用 lambda 定义一个堆栈,然后从中获取输出并运行sed以在 OpenAPI 规范中执行查找和替换以插入 uri,然后使用此修改创建第二个堆栈OpenAPI 规范。
例子:
/items:
post:
x-amazon-apigateway-integration:
uri: "arn:aws:apigateway:eu-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-west-2:123456789012:function:MyStack-SingletonLambda4677ac3018fa48679f6-B1OYQ50UIVWJ/invocations"
passthroughBehavior: "when_no_match"
httpMethod: "POST"
type: "aws_proxy"
Run Code Online (Sandbox Code Playgroud)
一季度。这似乎是一个鸡与蛋的问题,以上是唯一的方法吗?
我尝试使用SpecRestApi CDK 构造的defaultIntegration属性。该文件指出:
除非指定了集成,否则用作此 API 中创建的所有方法的默认值的集成。
这似乎应该能够使用 CDK 规范中定义的 lambda 定义默认集成,因此所有方法都使用此集成,而无需提前知道 lambda 的 uri。
因此我试过这个:
SingletonFunction myLambda = ...
SpecRestApi openapiRestApi = SpecRestApi.Builder.create(this, "MyApi")
.restApiName("MyApi")
.apiDefinition(ApiDefinition.fromAsset("openapi.yaml"))
.defaultIntegration(LambdaIntegration.Builder.create(myLambda)
.proxy(false)
.build())
.deploy(true) …Run Code Online (Sandbox Code Playgroud) amazon-web-services swagger aws-lambda aws-api-gateway openapi
我正在为具有 OpenAPI (Swagger) 定义的 REST API 构建模糊器。
我想测试 OpenAPI 定义中的所有可用路径,生成数据以测试服务器,分析响应代码和内容,并验证响应是否符合 API 定义。
我正在寻找一种从模型定义生成数据(JSON 对象)的方法。
例如,给定这个模型:
...
"Pet": {
"type": "object",
"required": [
"name",
"photoUrls"
],
"properties": {
"id": {
"type": "integer",
"format": "int64"
},
"category": {
"$ref": "#/definitions/Category"
},
"name": {
"type": "string",
"example": "doggie"
},
"photoUrls": {
"type": "array",
"items": {
"type": "string"
}
},
"tags": {
"type": "array",
"items": {
"$ref": "#/definitions/Tag"
}
},
"status": {
"type": "string",
"description": "pet status in the store"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想生成随机数据并得到如下内容: …
在撰写本文时,OpenAPI 3规范相对较新.我正在努力寻找支持3.0版的任何文档生成器.
有谁知道支持OpenAPI v3.0的生成器?
我正在使用 Swagger OpenAPI 规范工具,我在以下定义之一中有一个字符串数组属性:
cities:
type: array
items:
type: string
example: "Pune"
Run Code Online (Sandbox Code Playgroud)
我的 API 生成 JSON 结果,因此对于上述对象,以下结果出现在响应中:
{
"cities": [
"Pune"
]
}
Run Code Online (Sandbox Code Playgroud)
试过逗号分隔的字符串,如下所示:
cities:
type: array
items:
type: string
example: "Pune", "Mumbai", "Bangaluru"
Run Code Online (Sandbox Code Playgroud)
预期结果为:
{
"cities": [
"Pune",
"Mumbai",
"Bangaluru"
]
}
Run Code Online (Sandbox Code Playgroud)
但是编辑器显示错误。“错误的缩进”
我想为示例标签提供多个值有什么办法吗?
更新
下面的用户 Helen 给出了正确答案我有缩进问题,因此有嵌套数组(二维数组)
正确方法:
cities:
type: array
items:
type: string
example:
- Pune
- Mumbai
Run Code Online (Sandbox Code Playgroud)
我的方式(这是错误的)
cities:
type: array
items:
type: string
example:
- Pune
- Mumbai
Run Code Online (Sandbox Code Playgroud)
example在上述两种情况下寻找标记的缩进,这会有所不同,它的 YAML 缩进很重要。
有没有办法记录以下查询?
GET api/v1/users?name1=value1&name2=value
Run Code Online (Sandbox Code Playgroud)
其中查询参数名称是动态的,将从客户端接收.
我正在使用最新的Swagger API.
根据一般的文档,
Swagger-UI在四个位置接受配置参数。
从最低到最高优先级:
- 项目根目录中的swagger-config.yaml(如果存在)被烘焙到应用程序中
- 配置对象作为参数传递给Swagger-UI(SwaggerUI({...}))
- 从指定的configUrl获取的配置文档
- 在URL查询字符串中作为键/值对传递的配置项
我试图将swagger-config.yaml放在应用程序的根目录中,但无法正常工作。
我遵循了昂首阔步的安装步骤及其正常工作。但是大步自定义配置的步骤不起作用。我保存了以下文件,
swagger-ui
|--swagger-config.yaml
|--index.html
Run Code Online (Sandbox Code Playgroud)
url: "https://petstore.swagger.io/v2/swagger.json"
dom_id: "#swagger-ui"
validatorUrl: "https://online.swagger.io/validator"
oauth2RedirectUrl: "http://localhost:3200/oauth2-redirect.html"
Run Code Online (Sandbox Code Playgroud)
// Begin Swagger UI call region
const ui = SwaggerUIBundle({
//url: "https://petstore.swagger.io/v2/swagger.json",
//dom_id: '#swagger-ui',
deepLinking: true,
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
Run Code Online (Sandbox Code Playgroud)
我有什么想念的吗?
我通过 SwaggerHub 进行了新的 OpenAPI 设置。是否可以选择Accept全局强制某个标头?
我已经设置了Content-Type响应:
openapi: 3.0.0
paths:
/test-path:
get:
responses:
'200':
description: OK
content:
application/vnd.company.v1.0.0+json:
Run Code Online (Sandbox Code Playgroud)
Accept通过 cURL 请求插入不同的标头时,会执行以下操作:
{"message":"Missing matching response for specified Accept header"}
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为我们没有为此提供任何回应。
我正在使用此处描述的 Dotnet Core 运行状况检查。简而言之,它看起来像这样:
首先,您可以像这样配置服务:
services.AddHealthChecks()
.AddSqlServer("connectionString", name: "SQlServerHealthCheck")
... // Add multiple other checks
Run Code Online (Sandbox Code Playgroud)
然后,您注册一个端点,如下所示:
app.UseHealthChecks("/my/healthCheck/endpoint");
Run Code Online (Sandbox Code Playgroud)
我们也在使用 Swagger(又名 Open API),我们通过 Swagger UI 查看所有端点,但看不到健康检查端点。
有没有办法将它添加到控制器方法中,以便 Swagger 自动获取端点,或者以另一种方式将它与 swagger 集成?
到目前为止,我发现的最佳解决方案是添加自定义硬编码端点(如此处所述),但维护起来并不好。
在 OpenAPI 中,您可以指定additionalProperties: false为对象架构的一部分,以指示请求或响应正文中额外的未知属性将被视为验证错误。
在为 API 指定查询参数时,有什么方法可以做类似的事情吗?我想指出,包括明确记录之外的其他查询参数的请求将被视为错误并触发 HTTP 400 响应。
我看到您可以将单个参数标记为required: true,但我找不到任何方式说“这些是唯一允许的参数”。OpenAPI 3 规范允许这样做吗?如果是这样,如何?
openapi ×10
swagger ×7
swagger-2.0 ×2
swagger-ui ×2
aws-lambda ×1
enums ×1
javascript ×1
json ×1
swaggerhub ×1
yaml ×1