api-blueprint icon indicating copy to clipboard operation
api-blueprint copied to clipboard

Path segment variable with visible name?

Open s303 opened this issue 8 years ago • 5 comments

Looks like there is no way to render a parameter with visible name not as a query parameter.

For example: I have a commits (/commits) resource with page and size query parameters. And I would like to have ability to filter commits by project, and I would like to have it as an optional path parameter with name, like /project/windows95/commits. Is it possible?

Maybe some form of "form-style path operator" ({/project}) could be introduced? Like:

FORMAT: 1A
# Sample API
## Read commits [GET /{/project}/commits{?page,size}]
+ Parameters
  + page: 1 (number)
  + size: 1 (optional, number)
  + project: `windows95` (optional, string)
+ Response 200 (application/json)

That will be rendered as: /project/windows95/commits?page=1

s303 avatar Feb 01 '17 15:02 s303

Hi @sniff

## Read commits [GET /{project}/commits{?page,size}]

+ Parameters
    + page: 1 (number)
    + size: 1 (optional, number)
    + project: `windows95` (optional, string)

+ Response 200 (application/json)

is exactly what you ask for if I am reading correctly.

Another example with parameters https://apiblueprint.org/documentation/examples/07-parameters.html

w-vi avatar Feb 01 '17 16:02 w-vi

@w-vi No, it does not. This will add only parameter value to URL (windows95) without parameter name (project) itself.

Your example will be rendered as /windows95/commits?page=1 if project is present, and I would like to have /project/windows95/commits?page=1.

I don't want to describe two methods for with 100% same parameters (page, size...) like:

FORMAT: 1A
# Sample API
## Read commits [GET /commits{?page,size}]
+ Parameters
  + page: 1 (number)
  + size: 1 (optional, number)
+ Response 200 (application/json)
## Read commits for project [GET /project/{projectName}/commits{?page,size}]
+ Parameters
  + page: 1 (number)
  + size: 1 (optional, number)
  + projectName: `windows95` (optional, string)
+ Response 200 (application/json)

s303 avatar Feb 01 '17 16:02 s303

How about shared parameter section:

FORMAT: 1A

# Sample API

## Commit collection [/commits{?page,size}]

+ Parameters
    + page: 1 (number)
    + size: 1 (optional, number)

### Read commits [GET /commits{?page,size}]

+ Response 200 (application/json)

### Read commits for project [GET /project/{projectName}/commits{?page,size}]

+ Parameters
    + projectName: `windows95` (optional, string)
+ Response 200 (application/json)

FranklinYu avatar May 29 '17 03:05 FranklinYu

You can inherit parameters for an action from a resource currently.

pksunkara avatar May 29 '17 14:05 pksunkara

@franklinyu Could be an option, but it still requires to duplicate descriptions and Responses for both sections

s303 avatar May 29 '17 20:05 s303