vendredi 8 avril 2016

Which JSON adapter enables Ember to propagate all necessary requests to the server to maintain model consistence?

I am using Andy Crum's EmberDataModelMaker.

Having punched in the following two classes

// app/models/server-item.js
export default DS.Model.extend({
    hostName: DS.attr('string'),
    syncServers: DS.hasMany('string'),
    subscribers: DS.hasMany('string'),
    mailHost: DS.attr('string'),
    mailHostLogin: DS.hasMany('credentials')
});
// app/models/credentials.js
export default DS.Model.extend({
    user: DS.attr('string'),
    password: DS.attr('string'),
    server: DS.belongsTo('serverItem')
});

It's showing the following three different expected JSON formats (a very nice feature btw.):

DS.RESTAdapter

"serverItems": [
    {
        "id": 1,
        "hostName": "foo",
        "syncServers": [
            <stringids>
        ],
        "subscribers": [
            <stringids>
        ],
        "mailHost": "foo",
        "mailHostLogin": [
            <Credentialsids>
        ]
    }
],
"credentials": [
    {
        "id": 1,
        "user": "foo",
        "password": "foo",
        "server": <ServerItemid>
    }
]

DS.ActiveModelAdapter

"serverItems": [
    {
        "id": 1,
        "host_name": "foo",
        "sync_server_ids": [
            <stringids>
        ],
        "subscriber_ids": [
            <stringids>
        ],
        "mail_host": "foo",
        "mail_host_login_ids": [
            <Credentialsids>
        ]
    }
],
"credentials": [
    {
        "id": 1,
        "user": "foo",
        "password": "foo",
        "server_id": <ServerItemid>
    }
]

DS.JSONAPIAdapter

{
    "data": {
        "type": "server-items",
        "id": "1",
        "attributes": {
            "HostName": "foo",
            "MailHost": "foo",
        },
        "relationships": {
            "SyncServers": {
                "data": {
                    "type": "SyncServers",
                    "id": <SyncServersid>
                }
            },
            "Subscribers": {
                "data": {
                    "type": "Subscribers",
                    "id": <Subscribersid>
                }
            },
            "MailHostLogin": {
                "data": {
                    "type": "MailHostLogin",
                    "id": <MailHostLoginid>
                }
            }
        },
        "included": [
            {
                <sideloadedrelationships>
            ]
        }
    }
}
{
    "data": {
        "type": "credentials",
        "id": "1",
        "attributes": {
            "User": "foo",
            "Password": "foo",
        },
        "relationships": {
            "Server": {
                "data": {
                    "type": "Server",
                    "id": <Serverid>
                }
            }
        },
        "included": [
            {
                <sideloadedrelationships>
            ]
        }
    }
}

I am going to implement (or rather change) some WebServices on the Server side (using C#, ASP.NET Web API). Currently, the WebService already creates a result that is pretty similar to the format expected with DS.RESTAdapter - obviously, it would be ideal if I could use it without compromising the Data Integrity - can I?

If yes, would it empower Ember Data to send all the requests necessary to maintain the data consistency on the server? Meaning, would the client send a DELETE request to the server not only for the ServerItem but also for the Credentials item that is referenced via the mailHostLogin property when the user wants to delete a ServerItem?

If not: are both of the other two adapters fulfilling the above mentioned consistency requirement? Which of the other two should I implement - any experiences/recommendations out there?




Aucun commentaire:

Enregistrer un commentaire