typicode / json-server

Get a full fake REST API with zero coding in less than 30 seconds (seriously)
Other
72.93k stars 7.02k forks source link

Return full object on post? #213

Closed risonsimon closed 8 years ago

risonsimon commented 8 years ago

Hi,

Is it possible to return the full object that was created at a post endpoint rather than just the id?

For example, when I post to an endpoint with some json data, the item gets created and the id of the new item is returned. Is it possible to return the whole object, along with the data that was sent?

typicode commented 8 years ago

Hi @risonsimon,

It should return the full object + the id. Usually, it means that the endpoint didn't receive the object and therefore only returns the id.

You can test a POST on http://jsonplaceholder.typicode.com Here's how to make it https://github.com/typicode/jsonplaceholder#creating-a-resource

If you want, you can copy/paste your request code, I'll have a look.

risonsimon commented 8 years ago

I'm using fakerjs to generate data. This is for one resource.

users: _.times(10, function (id){
      return {
        id: id + 1,
        email: faker.internet.email(),
        first_name: faker.name.firstName(),
        last_name: faker.name.lastName(),
      }
    })

When I post to http://localhost:3000/users with following data:

 {
    "email": "risonsimon@hotmail.com",
  }

I only get the id value in the response. I'm using json-server version 0.8.2

typicode commented 8 years ago

Sorry, wasn't clear. I meant the JS code that is doing the POST request. For example, with jQuery you should be able to create a user like this:

$.ajax('http://localhost:3000/users', {
  method: 'POST',
  data: {
    "email": "risonsimon@hotmail.com"
  }
}).then(function(data) {
  console.log(data); // should return { id: 11, email: 'risonsimon@hotmail.com' }
})
risonsimon commented 8 years ago

I'm using fetch.

I've found the issue. I was not setting the header to application/json. Because of this, the media type was being set as text. Once I added the following to my header, it started to return the full object. Btw, thanks for this awesome product. :)

'Accept': 'application/json',
'Content-Type': 'application/json'

Here's the code I'm using.

fetch(`${URLPATH}`, {
      method: 'post',
      headers: {
        'Authorization': `Token ${token}`,
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        first_name: first_name,
        last_name: last_name,
        email_id: email
      })
    })
.then(response => {
      console.log(response);
    })
typicode commented 8 years ago

You're welcome. Glad it's solved :)

onpaws commented 7 years ago

Thanks @risonsimon your tip worked for me too.