0

Ember.js と Flask Restless を組み合わせようとしていますが、JSON API とのインターフェイスに問題が発生しています。

問題は、Ember がクライアント側で期待しているものと一致するように JSON をマッサージする必要があることです。

Ember は次のようなものを送信していPOSTます:

u'todo': {u'isCompleted': False, u'title': u'hello'}}

しかしFlask Restlessはこのようなものを期待しています

{'is_completed': False, 'title': u'hello'}

以下に示すようにこれを行うことができますが、Flask Restless プリプロセッサは戻り引数を受け入れず、データ オブジェクトをその場で変更する必要があり、必要なものを含む新しい dict を作成することはできません。したがって、必要なキーを追加および削除して、指定されたデータ dict を不器用に変更する必要があります。

より複雑なモデルに簡単にスケーリングできる、より優れたソリューションを持っている人はいますか?

def ember_formatter(result):
    for key in result.keys():
        if key != 'objects':
            del result[key]

    result['todos'] = result['objects']
    del result['objects']

def pre_ember_formatter(data=None, **kw):

    data['is_completed'] = data['todo']['isCompleted']
    data['title'] = data['todo']['title']
    del data['todo']

restless_manager.create_api(
    Todo,
    methods=['GET', 'POST', 'DELETE', 'PUT', 'PATCH'],
    url_prefix='/api',
    collection_name='todos',
    results_per_page=-1,
    postprocessors={
        'GET_MANY': [ember_formatter]
    },
    preprocessors={
        'POST': [pre_ember_formatter],
    }
)
4

2 に答える 2

0

彼の方法が最終的に悟りへの道につながったので、私はこれをトーランに渡しますが、私がこれをどのように行うことができたかについて明確にしたかったのです.

これらすべての変更は、Ember のクライアント側で行う方が実際には簡単であることがわかりました。一般的な考え方は、サーバーから入ってくる JSON を変更し、クライアントから出る JSON を変更する必要があるということです。

これはすべてDS.RESTSerializerクラスで行われます。見れば、これを行う方法の例があります。Ember のドキュメントは、慣れれば素晴らしいものです。

したがって、サーバーから受信する JSON を変更するには、extractArray および extractSingle 関数を変更する必要があります。

クライアントから出る JSON を変更するには、serialize および serializeIntoHash 関数を変更します。これは非常に簡単です。

これをすべて Ember で行うのは理にかなっていると思います。通常、話している API を制御できないからです。

于 2013-12-14T11:56:35.420 に答える
0

落ち着きのないAPIマップがdjango-rest-frameworkにどれだけ近いかは100%わかりませんが、上記の例では、DRFアダプターはそのまま使用できます。

https://github.com/toranb/ember-data-django-rest-adapter

このアプローチを使用すると、JSON API をそのままにして、新しいクライアント側アダプターをプラグインするだけで済みます。

于 2013-12-10T05:15:12.433 に答える