swagger-typescript-api icon indicating copy to clipboard operation
swagger-typescript-api copied to clipboard

Response data and error is null when using --extract-response-body

Open Korywon opened this issue 1 year ago • 3 comments

FWIW, I'm using this Swagger spec to generate an API: https://esi.evetech.net/latest/swagger.json

I then use the following command to generate the API:

swagger-typescript-api \
  -p https://esi.evetech.net/latest/swagger.json \
  -o src/app/api/esi \
  --route-types \
  --responses \
  --extract-enums \
  --extract-request-params \
  --extract-request-body \
  --extract-response-body \
  --extract-response-error \
  --modular \
  --sort-types \
  --sort-routes

Whenever I try to use --extract-response-body, I'm not ever able to access the data attribute. I have confirmed that I'm getting valid data back from await response.json().

import { Api } from './api'

const api = new Api()

const response = await api.getContractsCharacterIdContracts({ ... })

// These don't work; both always null
// if (response.error) return
// const data = response.data

// This works fine
if (!response.ok) return
const data = await response.data()

It's only when I remove the --extract-response-body that I'm able to access the data and error attributes again.

Anything I'm doing wrong or is there something else going on?

Korywon avatar Oct 23 '23 13:10 Korywon

I have the same problem

idmarinas avatar Jan 18 '24 22:01 idmarinas

I believe the issue is the request function doesn't read the Content-Type, and you need to provide a configuration object to Api:

Api({
  baseApiParams: {
    format: "json"
  }
})

brmzkw avatar Feb 15 '24 11:02 brmzkw

I believe the issue is the request function doesn't read the Content-Type, and you need to provide a configuration object to Api:

Api({
  baseApiParams: {
    format: "json"
  }
})

this solved most of my methods in run-time, but some are still generated incorrectly without any format specified, and overriding it in baseApiParams doesn't seem to work and the client tries to send the body as text instead of json

this happens when the request body is not extracted for some reason, e.g., { id: string } is reused a lot between my routes and this type is always inlined

I had to go back to unextracted request and response types

bkiac avatar Feb 16 '24 08:02 bkiac