Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/todo/test/acceptance/application.acceptance.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ describe('Application', () => {
const response = await client
.post('/todo')
.send(todo)
.expect(200);
.expect(201);
expect(response.body).to.containEql(todo);
const result = await todoRepo.findById(response.body.id);
expect(result).to.containEql(todo);
Expand Down
5 changes: 5 additions & 0 deletions packages/rest/src/rest.server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,11 @@ export class RestServer extends Context implements Server, HttpServerLike {
return Promise.resolve();
}

// Any item down the sequence chain can override the statusCode if needed
if (request.method === 'POST') {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is too hacky. Not all POST is for create. Can we allow/infer the statusCode from https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#responses-object?

Copy link
Contributor

@raymondfeng raymondfeng Apr 11, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a few potential options for controller methods to express status code:

  1. Direct access to Response object
  2. Decorate the method to customize the default status code
  3. Return a HttpResponse object such as {statusCode: 201, headers: {}, body: result}. It's similar as https://docs.oracle.com/javaee/6/api/javax/ws/rs/core/Response.ResponseBuilder.html

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We have issues to track the stories of providing a way for users to set the statusCode and appropriate response headers.

I personally like option 3 -- but for a POST request I think we should automatically be defaulting to 201 if a different statusCode is not provided.

Copy link
Contributor

@jannyHou jannyHou Apr 16, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@virkt25 After I did my PoC in #1260, I tend to agree with your workaround here as the quickest fix....or allowing more time, we can do proposal#3.

Miroslav brings an important thing: when a response returns 201, it also includes a header with the URI of created item.

but for a POST request I think we should automatically be defaulting to 201 if a different statusCode is not provided.

I still feel 200 is better, since if default POST to 201, the user need to provide header in result by default as well.

response.statusCode = 201;
}

if (
request.method === 'GET' &&
request.url &&
Expand Down