Should hasMany relationships generate a smart url


#1

I am working on optimizing my backend json api. The biggest bottleneck is serializing all the relationship ids. I have had success using the links option and generating links like “posts/:post_id/comments” or “comments?post_id=:post_id”. But I don’t think it is optimal to have the backend serialize the url in cases where the url is obvious.

I would like to extend ember-data to build the url automatically when the relationship is asynchronous. All the info needed is available or could be customized by adding options like ‘foreign_key’, ‘primary_key’ to the hasMany definition.

On a related note I am also thinking of extending the reload method to append the a timestamp to the request so the backend could return just the objects that have changed. This might be better implemented in the controller, but just a thought.

Reloading a relationship would do something like:

var query = {this.foreign_key: this.id, updated_after: this.max_timestamp}
this.store.filter( 'comment', query , function(record){
   return record.get(this.foreign_key) == this.id;
});

Regarding the url has any one done anything similar? Is this something that should be considered being built in?


#2

I think what you’re asking for (for the first part at least) is part of the jsonapi spec…and it looks some wonderful folks have created an adapter that adheres to that spec. (Haven’t actually looked at the adapter to see what support is actually built in).


#3

Currently if you know the form of the link you could put in the normalize hook client side. As soon as someone implements https://github.com/emberjs/data/issues/2162 this should be easier


#4

@terzicigor okay cool the normalize hook will work for now. I’ll try and give that issue a shot this week.