Должен ли я использовать ngrx-data, если получаемый тип контента JSON -LD + Hydra? - PullRequest
1 голос
/ 19 января 2020

Мне нравятся преимущества JSON -LD, Hydra и только что узнал о NgRx / data.

Я пытался использовать его без настройки, что, очевидно, не сработало. Сегодня я потратил несколько часов на документацию, которая оставила мне еще больше вопросов.

Важным моментом является то, что я не хочу жертвовать какой-либо информацией о коллекции. Поэтому я не могу просто использовать пользовательские эффекты.

Есть идеи, как к этому подойти?

Коллекция Ответ:

{
    "@context": "/contexts/Article",
    "@id": "/articles",
    "@type": "hydra:Collection",
    "hydra:member": [
        {
            "@id": "/articles/91",
            "@type": "http://schema.org/Article",
            "headline": "Neque illum sed adipisci dolorem rem.",
            "slug": "reiciendis-nesciunt-labore-voluptas",
            "author": {
                "@id": "/people/91",
                "@type": "http://schema.org/Person",
                "id": 91,
                "name": "Edd Nienow"
            },
            "publisher": null,
            "aggregateRating": null,
            "articleCreator": {
                "@id": "/people/91",
                "@type": "http://schema.org/Person",
                "name": "Edd Nienow"
            },
            "articleType": "tutorial",
            "creativeWorkStatus": "draft",
            "articleVersions": [
                {
                    "content": "Facere illo praesentium accusantium suscipit voluptatem laborum nihil sed. Aperiam doloremque mollitia nisi voluptatem facilis. Voluptatem sed aut et incidunt id et error modi.",
                    "articleBody": "Omnis et dolores enim praesentium. Temporibus nisi mollitia maiores voluptas nobis impedit.",
                    "brief": "Est quae minima ut ab eaque ut. Neque qui nemo quaerat consequatur.",
                    "wordCount": 779,
                    "image": null,
                    "createdAt": "1980-09-30T01:43:18+00:00"
                }
            ],
            "articleCategories": [],
            "articleTerms": [],
            "publishedAt": "2003-11-11T05:23:26+00:00",
            "createdAt": "1971-10-23T07:53:28+00:00"
        },
    ],
    "hydra:totalItems": 100,
    "hydra:view": {
        "@id": "/articles?page=4",
        "@type": "hydra:PartialCollectionView",
        "hydra:first": "/articles?page=1",
        "hydra:last": "/articles?page=4",
        "hydra:previous": "/articles?page=3"
    }

Один ответ:

{
    "@context": "/contexts/Article",
    "@id": "/articles/91",
    "@type": "http://schema.org/Article",
    "headline": "Neque illum sed adipisci dolorem rem.",
    "slug": "reiciendis-nesciunt-labore-voluptas",
    "author": {
        "@id": "/people/91",
        "@type": "http://schema.org/Person",
        "name": "Edd Nienow"
    },
    "publisher": null,
    "aggregateRating": null,
    "articleCreator": {
        "@id": "/people/91",
        "@type": "http://schema.org/Person",
        "name": "Edd Nienow"
    },
    "articleType": "tutorial",
    "creativeWorkStatus": "draft",
    "articleVersions": [
        {
            "content": "Facere illo praesentium accusantium suscipit voluptatem laborum nihil sed. Aperiam doloremque mollitia nisi voluptatem facilis. Voluptatem sed aut et incidunt id et error modi.",
            "articleBody": "Omnis et dolores enim praesentium. Temporibus nisi mollitia maiores voluptas nobis impedit.",
            "brief": "Est quae minima ut ab eaque ut. Neque qui nemo quaerat consequatur.",
            "wordCount": 779,
            "image": null,
            "createdAt": "1980-09-30T01:43:18+00:00"
        }
    ],
    "articleCategories": [],
    "articleTerms": [],
    "publishedAt": "2003-11-11T05:23:26+00:00",
    "createdAt": "1971-10-23T07:53:28+00:00"
}

1 Ответ

0 голосов
/ 21 апреля 2020

Я вижу один способ сделать это:

  1. Добавить "@" свойства для ваших моделей:
export interface HydraEntity {
    '@id': string;
    '@type': string;
}

export interface Author extends HydraEntity{
    id: number;
    name: string;
}
Измените способ обработки ответов API Ngrx / data, добавив дополнительные поля "hydra: *": https://ngrx.io/guide/data/entity-metadata#additionalcollectionstate

Вы сможете уменьшить свой результат в своем штат.


Я никогда не пробовал, но я предполагал, что после этого вопроса: https://github.com/ngrx/platform/issues/1948

Ведущий к PR: https://github.com/ngrx/platform/pull/1921

...