Ember.js - 如何处理 API-平台 - 资源 link 而不是负载中的 Id

Ember.js - How to deal with API-Platform - resource link instead of Id in payload

我将 Emberjs 3.2 与 Api-Platform 一起使用,我 运行 遇到以下问题:

这是我的 API 负载:

{
      "id": "/api/articles/0d8cb40c-221b-4c54-9e29-43877093b839",
      "type": "Article",
      "attributes": {
        "_id": "0d8cb40c-221b-4c54-9e29-43877093b839",
        "title": "Article",
        "content": "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>",
        "dateCreated": "2018-07-17T18:20:29+03:00",
        "dateUpdated": "2018-07-17T18:20:29+03:00"
      },
      "relationships": {
        "author": {
          "data": {
            "type": "User",
            "id": "/api/users/b26e0381-6800-4f47-b269-9a92b27ad331"
          }
        }
      }
    }

如您所见,我在有效载荷中得到了一个 IRI 而不是 id。

我开启了api-平台选项:allow_plain_identifiers: true 但我仍然得到 IRI 而不是相关实体的 ID。

如何使用 EmberData JSONApi 适配器处理此问题?

我很感激任何想法!

Ember 数据提供了一种有用的序列化程序方法来处理这种情况:normalizeResponse.

您可以使用 ember generate serializer <modelName> 创建一个序列化程序(如果所有模型都需要此模式,您可以创建一个 application 序列化程序或从基本序列化程序继承。您可能需要这个您的一个或所有模型。

Ember 指南对此提供了准确的解决方案:https://guides.emberjs.com/release/models/customizing-serializers/

在您的示例中,您可以这样做:

export default DS.JSONAPISerializer.extend({
  normalizeResponse(store, primaryModelClass, payload, id, requestType) {
    payload.data.id = payload.data.attributes._id;
    delete payload.data.attributes._id;

    return this._super(...arguments);
  },
});