E07700: HTTP PATH parameter is invalid

Category: E07xxx Full resolution · Reported in phase: EXPLICIT_TYPE_SYMBOL_DEFINITION · Classification: SERVICE_HTTP_PATH_PARAM_INVALID · All error codes

What went wrong

The HTTP path parameter format is invalid.

Worked examples

Compilable examples demonstrating this error and the correct fix:

  • ek9 -q 658 (How do I extract path parameters in EK9 services?)

How to fix it

  1. Use {variableName} format for path parameters
  2. Ensure path is valid URI format

Common causes

  • Missing braces around variable
  • Invalid characters in path
  • Malformed URI pattern

See also

  • E07700: invalid path parameter format (this error)
  • E07680: path variable in wrong context

Examples

Every example is compiled by the EK9 compiler: the first fails exactly as captioned, the others fix it.

Fails with E07700: HTTP PATH parameter is invalid

#!ek9
defines module error.e07700.bad

  defines class

    TextResponse with trait of HTTPResponse
      text as String?

      default private TextResponse()

      TextResponse()
        -> body as String
        this.text: body

      override contentType() as pure
        <- rtn as String: "text/plain"

      override content()
        <- rtn as Bytes: Bytes().withUtf8(text)

      override status() as pure
        <- rtn as Integer: 200

      default operator ?

  defines service

    Addresses for :/addresses open

      byId() as GET for :/{address-id}
        ->
          //There is no {no-such-path} in the URI
          addressId as Integer :=: PATH "no-such-path"
        <- response as HTTPResponse: TextResponse(`address ${addressId}`)

Fixed: Name the URI's variable

#!ek9
defines module error.e07700.good

  defines class

    TextResponse with trait of HTTPResponse
      text as String?

      default private TextResponse()

      TextResponse()
        -> body as String
        this.text: body

      override contentType() as pure
        <- rtn as String: "text/plain"

      override content()
        <- rtn as Bytes: Bytes().withUtf8(text)

      override status() as pure
        <- rtn as Integer: 200

      default operator ?

  defines service

    Addresses for :/addresses open

      //Name the URI variable exactly
      byId() as GET for :/{address-id}
        -> addressId as Integer :=: PATH "address-id"
        <- response as HTTPResponse: TextResponse(`address ${addressId}`)

      //Or name the parameter as the variable, and PATH is implied
      byRoute() as GET for :/route/{routeId}
        -> routeId as String
        <- response as HTTPResponse: TextResponse(`route ${routeId}`)

Questions and answers

These Q&A entries show E07700 and its fix: