wolfadex / elm-open-api-cli

A CLI tool for generating Elm modules from Open API specs.
https://www.npmjs.com/package/elm-open-api
26 stars 6 forks source link

Missing trailing slash #154

Open myrho opened 1 day ago

myrho commented 1 day ago

Thank you for your tremendous work on this package! I have found this issue:

Given this spec

{
  "openapi": "3.1.0",
  "info": {
    "title": "API",
    "version": "0.1.0"
  },
  "servers": [
    {
      "url": "https://example.com"
    }
  ],
  "paths": {
    "/api/v1/product/": {
      "get": {
        "tags": [
          "Product"
        ],
        "summary": "List Products",
        "operationId": "Product-list_products",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "items": {
                    "$ref": "#/components/schemas/Product"
                  },
                  "type": "array",
                  "title": "Response Product-List Products"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Product": {
        "properties": {
          "Artikelnr": {
            "type": "string",
            "title": "Artikelnr"
          }
        },
        "type": "object",
        "required": [
          "Artikelnr"
        ],
        "title": "Product"
      }
    }
  }
}

which contains a path with a trailing slash, elm-open-api 0.7.0 generates:

productListProductsRisky config =
    Http.riskyRequest
        { url =
            Url.Builder.crossOrigin
                "https://example.com"
                [ "api", "v1", "product" ]
                []
        , method = "GET"
        , headers = []
        , expect =
            OpenApi.Common.expectJsonCustom
                config.toMsg
                (Dict.fromList [])
                (Json.Decode.list Api.Json.decodeProduct)
        , body = Http.emptyBody
        , timeout = Nothing
        , tracker = Nothing
        }

which in turn results in a request to the endpoint without the trailing slash.

I would expect the generated request paths to exactly match the spec.

This was a related issue: #72

miniBill commented 1 day ago

I guess generating [ "api", "v1", "product", "" ] would work?

wolfadex commented 15 hours ago

Yeah, that seems like a good fix