[aerogear-dev] [forge-dev] Aerogear.js for CRUD

Vineet Reynolds Pereira vpereira at redhat.com
Tue Dec 17 10:57:31 EST 2013



----- Original Message -----
> From: "Jay Balunas" <jbalunas at redhat.com>
> To: "AeroGear Developer Mailing List" <aerogear-dev at lists.jboss.org>
> Cc: "forge-dev List" <forge-dev at lists.jboss.org>
> Sent: Tuesday, December 17, 2013 8:35:22 PM
> Subject: Re: [aerogear-dev] [forge-dev]  Aerogear.js for CRUD
> 
> 
> On Dec 17, 2013, at 9:43 AM, Vineet Reynolds Pereira < vpereira at redhat.com >
> wrote:
> 
> 
> 
> 
> 
> 
> ----- Original Message -----
> 
> 
> From: "Lucas Holmquist" < lholmqui at redhat.com >
> To: "forge-dev List" < forge-dev at lists.jboss.org >
> Cc: aerogear-dev at lists.jboss.org
> Sent: Tuesday, December 17, 2013 6:59:10 PM
> Subject: Re: [forge-dev] [aerogear-dev] Aerogear.js for CRUD
> 
> 
> On Dec 17, 2013, at 4:25 AM, Sebastien Blanc < sblanc at redhat.com > wrote:
> 
> 
> 
> 
> Adding again aerogear list.
> I think that we must discuss with the team (aerogear) on how we can/must
> handle a proper 201 response.
> 
> i don't see this as a client issue at all. jQuery ajax is used under the hood
> here and it is handling the 201 fine, but it is choking on parsing the
> response since it is not in the correct format, thus calling back in the
> error callback.
> 
> Ah, you mean this problem:
> 
> http://jquery.com/upgrade-guide/1.9/#jquery-ajax-returning-a-json-result-of-an-empty-string
> 
> This would definitely require the server to not send empty responses when the
> client expects JSON.
> 
> So in this case, with jQuery 1.9+ what is the best way for the us to handle
> this. Is this a chance in AeroGear.js to help handle this situation, or do
> we need to make sure the server impls reply with content, even with a 201?

I'm not aware of what Aerogear does but the question that would lead to the answer is
- Does Aerogear expect that the response contain JSON?

The rationale behind jQuery's decision to treat empty responses as errors is - the expected 
datatype was JSON, and thus an empty response body for a response with content/type 
application/json is an error.

If the AG client expects a JSON response, then I'd agree that the
server must not respond with an empty response body. For instance, Backbone.js does this:
https://github.com/jashkenas/backbone/blob/master/backbone.js#L1140
and thus the REST API is expected to send JSON in the response body on Model.save().

On the other hand, if the client does not expect a JSON response, then it must not 
set the datatype when invoking $.ajax(). This may not be practical - Backbone.js doesn't
do this and instead allows users to swap in custom Backbone.sync or Backbone.ajax 
implementations to get around this.

I'll try and address this in FORGE-1361 taking this behavior into account.
It looks like we need a different type of a REST resource for AG clients.


> 
> 
> 
> 
> 
> 
> 
> 
> this should really be handled on the server
> 
> 
> 
> 
> 
> On 12/17/2013 09:58 AM, Ivan St. Ivanov wrote:
> 
> 
> 
> Hi!
> 
> I think that the 'right' approach is to respond with 201 (created) and return
> a URI to the newly created resource.
> 
> Cheers,
> Ivan
> 
> 
> On Tue, Dec 17, 2013 at 12:58 AM, Lincoln Baxter, III <
> lincolnbaxter at gmail.com > wrote:
> 
> 
> 
> Either is typical, but I think that most "pure" restifarians would favor the
> 201.
> 
> 
> On Mon, Dec 16, 2013 at 5:41 PM, Burr Sutter < bsutter at redhat.com > wrote:
> 
> 
> 
> I need to find my REST bible - what is typical to respond to the POST with
> the JSON-serialized entity that was originally POST'd or to simply respond
> with a basic acknowledgement (http 201)?
> 
> 
> On Dec 16, 2013, at 4:25 PM, Vineet Reynolds Pereira < vpereira at redhat.com >
> wrote:
> 
> 
> 
> 
> Adding forge-dev.
> 
> ----- Original Message -----
> 
> 
> From: "Burr Sutter" < bsutter at redhat.com >
> To: "AeroGear Developer Mailing List" < aerogear-dev at lists.jboss.org >
> Sent: Tuesday, December 17, 2013 1:59:41 AM
> Subject: Re: [aerogear-dev] Aerogear.js for CRUD
> 
> That seems to do the trick - now, where do we apply the fix? :-)
> 
> Well, ideally this would be a feature request in Forge to support a new type
> of a REST resource. But a couple of modified lines might not warrant it.
> 
> It would be better to treat this as a flag to be enabled during REST resource
> scaffolding. It would allow users to choose how the resource behaves -
> * send a 201 response with Location header,
> * send a 201 response with Location header and also a response entity.
> 
> It would most likely be addressed in Forge 2.
> 
> 
> 
> 
> On Dec 16, 2013, at 3:06 PM, Vineet Reynolds Pereira < vpereira at redhat.com >
> wrote:
> 
> 
> 
> 
> 
> 
> ----- Original Message -----
> 
> 
> From: "Lucas Holmquist" < lholmqui at redhat.com >
> To: "AeroGear Developer Mailing List" < aerogear-dev at lists.jboss.org >
> Cc: "Vineet Reynolds Pereira" < vpereira at redhat.com >
> Sent: Tuesday, December 17, 2013 12:53:25 AM
> Subject: Re: [aerogear-dev] Aerogear.js for CRUD
> 
> 
> On Dec 16, 2013, at 1:52 PM, Burr Sutter < bsutter at redhat.com > wrote:
> 
> 
> 
> Adding Vineet as he has spent time on the Forge REST scaffolding.
> 
> On Dec 16, 2013, at 7:01 AM, Sebastien Blanc < scm.blanc at gmail.com > wrote:
> 
> 
> 
> Burr,
> I've added some logs statements on the client and basically it seems it
> can not parse the response from the server :
> 
> I/Web Console( 1386): textStatus: parsererror at
> file:///android_asset/www/js/index.js:103
> I/Web Console( 1386): error: SyntaxError: Unexpected end of input at
> file:///android_asset/www/js/index.js:104
> 
> If I do a CURL like this :
> curl -v -b cookies.txt -c cookies.txt -H "Accept: application/json" -H
> "Content-type: application/json" -X POST -d
> '{"phoneNumber":"1234567890","email":" newTest at test.com ","name":"newTest"}'
> http://agmobile-html5.rhcloud.com/rest/forge/members
> 
> I should have pointed to the sources to the REST endpoint:
> https://github.com/burrsutter/agmobile/blob/master/src/main/java/com/burrsutter/agmobile/rest/MemberEndpoint.java
> This was generated by Forge as I am too lazy to type up a full CRUD REST
> endpoint myself :-)
> 
> 
> 
> I got an correct answer but the content type is 'text/plain' , please
> check your rest endpoint to be sure it's producing json as output, that
> should solve your issue.
> It says
> @POST
> @Consumes("application/json")
> 
> needs a @Produces("application/json")
> 
> I'm not sure that will help. The response is a HTTP 201 with a Location
> header.
> Is the client expecting an entity of type application/json in the response ?
> 
> If yes, then the method should look like:
> 
> @POST
> @Consumes("application/json")
> public Response create(MemberDTO dto)
> {
> Member entity = dto.fromDTO(null, em);
> em.persist(entity);
> return
> Response.created(UriBuilder.fromResource(MemberEndpoint.class).path(String.valueOf(entity.getId())).build()).entity(entity).build();
> }
> 
> I've added : .entity(entity) in the above method to populate the response
> with the entity.
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> Could you also paste the commands you used in Forge to scaffold the REST
> endpoints so that we can check there hasn't been an incompatibility
> introduced ?
> I just used the Forge Wizard that is built into JBDS/Tools
> http://screencast.com/t/QrKkCoFZMUn
> 
> error.status is 201
> error.responseText is blank
> 
> 
> 
> 
> 
> 
> 
> On Sat, Dec 14, 2013 at 6:06 PM, Burr Sutter < bsutter at redhat.com > wrote:
> I am having a problem with pipe.save(), likely user error :-)
> 
> For some reason, the POST is occurring, the save seems to work but the
> error callback is invoked, not the success method.
> 
> And I am doing all of this in the context of our tooling which has some
> limitations (auto-closing console/firebug lite)
> 
> http://screencast.com/t/gosd7Qnhz
> 
> REST endpoint:
> http://agmobile-html5.rhcloud.com/rest/forge/members
> Use of Forge, with the Member.java entity to offer full CRUD capabilities
> 
> Sources:
> https://github.com/burrsutter/AGContacts/blob/master/www/js/index.js
> 
> 
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/aerogear-dev
> 
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/aerogear-dev
> 
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/aerogear-dev
> 
> 
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/aerogear-dev
> 
> 
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/aerogear-dev
> _______________________________________________
> forge-dev mailing list
> forge-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/forge-dev
> 
> 
> _______________________________________________
> forge-dev mailing list
> forge-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/forge-dev
> 
> 
> 
> --
> Lincoln Baxter, III
> http://ocpsoft.org
> "Simpler is better."
> 
> _______________________________________________
> forge-dev mailing list
> forge-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/forge-dev
> 
> 
> 
> _______________________________________________
> forge-dev mailing list forge-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/forge-dev
> 
> _______________________________________________
> forge-dev mailing list
> forge-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/forge-dev
> 
> 
> _______________________________________________
> forge-dev mailing list
> forge-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/forge-dev
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/aerogear-dev
> 
> 
> _______________________________________________
> aerogear-dev mailing list
> aerogear-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/aerogear-dev


More information about the aerogear-dev mailing list