sulmar / vavatech-dotnet-core-microservices-202111

Przykładowa aplikacja ze szkolenia Mikrousługi w NET Core 5
2 stars 0 forks source link

Czym się różni application/json-patch+json od application/merge-patch+json ? #1

Closed sulmar closed 2 years ago

sulmar commented 2 years ago

Jeden i drugi protokół są do siebie bardzo podobne i służą do tego samego. Jednak działają nieco inaczej...

JSON Patch

application/json-patch+json opisany przez RFC6902 przypomina transakcje bazy danych. Jest to zbiór operacji (zamień, dodaj, usuń, skopiuj), które mogą być przeprowadzone na dokumencie.

Na przykład


[
    {
        "op" : "replace" ,
        "path" : "/email" ,
        "value" : "john.smith@domain.com"
    },

    {
        "op" : "remove" ,
        "path" : "/twitter" 
    }
]

JSON Merge Patch

application/merge-patch+json opisany przez RFC7386 zawiera docelową wersję dokumentu. Wartość null jest specjalnie traktowana i służy do usuwania elementów.

{
    "email": "john.smith@domain.com",
    "twitter": null
}

Jak widać format JSON Merge Patch jest dużo mniejszy i ma pierwszy rzut oka wydaje się lepszym rozwiązaniem. Niestety nie ma obsługi dodawania i usuwania elementów z kolekcji (array). Trudniejsze jest przechowywanie takiej operacji w bazie danych SQL. Chyba, że korzystamy z NoSQL, np. MongoDb

Dlatego format musimy wybrać zależnie od konkretnego przypadku. Jeśli wystarczy nam zmiana wartości to JSON Merge Patch może okazać się lepszym rozwiązaniem. Przy bardziej złożonych operacjach, np. dodawanie/usuwanie/powielanie elementów polecam JSON Patch.

Warto dodać, że w .NET Core 5 jest obsługa JSON Patch za pomocą standardowej paczki Microsoft.AspNetCore.JsonPatch. Natomiast JSON Merge Patch nie jest obsługiwany natomiast można skorzystać z paczki Morcatko.AspNetCore.JsonMergePatch

Polecam artykuł: https://erosb.github.io/post/json-patch-vs-merge-patch/