Azure / Azure/data-api-builder

[Bug]: Kiota generation is weird because of the OpenAPI scheme

Open
#3,632 1 comment 0 reactions 0 assignees View on GitHub
bug cri triage
Dominant language
C#
Stars
1.5k
Forks
370
Avg merge
3d 17h
Merged PRs (30d)
8

Description

### What happened?

For a simple orders table, I get this path in the OpenAPI document

```json
"/Order": {
"get": {
"tags": [
"Order"
],
"description": "Returns entities.",
"parameters": [
{
"name": "X-MS-API-ROLE",
"in": "header",
"schema": {
"type": "string"
}
},
{
"name": "Authorization",
"in": "header",
"schema": {
"type": "string"
}
},
{
"name": "$select",
"in": "query",
"description": "A comma separated list of fields to return in the response.",
"schema": {
"type": "string"
}
},
{
"name": "$filter",
"in": "query",
"description": "An OData expression (an expression that returns a boolean value) using the entity's fields to retrieve a subset of the results.",
"schema": {
"type": "string"
}
},
{
"name": "$orderby",
"in": "query",
"description": "Uses a comma-separated list of expressions to sort response items. Add 'desc' for descending order, otherwise it's ascending by default.",
"schema": {
"type": "string"
}
},
{
"name": "$first",
"in": "query",
"description": "An integer value that specifies the number of items to return. Default is 100.",
"schema": {
"type": "integer"
}
},
{
"name": "$after",
"in": "query",
"description": "An opaque string that specifies the cursor position after which results should be returned.",
"schema": {
"type": "string"
}
}
],
"responses": {
"400": {
"description": "BadRequest"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "NotFound"
},
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"value": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Order"
}
},
"nextLink": {
"type": "string"
}
}
}
}
}
}
}
},
"post": {
"tags": [
"Order"
],
"description": "Create entity.",
"parameters": [
{
"name": "X-MS-API-ROLE",
"in": "header",
"schema": {
"type": "string"
}
},
{
"name": "Authorization",
"in": "header",
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Order_NoAutoPK"
}
}
},
"required": true
},
"responses": {
"400": {
"description": "BadRequest"
},
"401": {
"description": "Unauthorized"
},
"403": {
"description": "Forbidden"
},
"404": {
"description": "NotFound"
},
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"value": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Order"
}
}
}
}
}
}
},
"409": {
"description": "Conflict"
}
}
}
}
```

Then I run Kiota in the document and I get the following

```cs
[Obsolete("This method is obsolete. Use GetAsOrderGetResponseAsync instead.")]
public async Task GetAsync(Action>? requestConfiguration = default, CancellationToken cancellationToken = default) { /*stuff*/}

public async Task GetAsOrderGetResponseAsync(Action>? requestConfiguration = default, CancellationToken cancellationToken = default) { /* stuff */}
```

From what I understood, this is a problem on the generated OpenAPI Specification that is not enough typed (the object should be an explicit object like "OrderCollection"

```json
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"value": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Order"
}
},
"nextLink": {
"type": "string"
}
}
}
}
}
}
```

### Version

1.6.77

### What database are you using?

Azure SQL

### What hosting model are you using?

Custom Docker host

### Which API approach are you accessing DAB through?

REST

### Relevant log output

```Text

```

### Code of Conduct

- [x] I agree to follow this project's Code of Conduct

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.