poniedziałek, 9 stycznia 2023

Partial Update - PATCH w ASP.NET Core API

Partial Update - czyli częściowa aktualizacja zasobów możliwa jest przy użyciu metody PATCH. Jak powinniśmy używać PATCH opisane jest na stronie JSON Patch | jsonpatch.com Polecam zwłaszcza zobaczyć na opis składni, która nie jest od razu oczywista. Sama operacja partial update jest prosta i bardzo elastyczna a większość logiki załatwia za nas odpowiednia biblioteka. 

Aby w łatwy sposób skorzystać z PATCH w projekcie:

1. Instalujemy paczkę nuget Microsoft.AspNetCore.Mvc.NewtonsoftJson:


2. Zmieniamy bibliotekę formatującą JSONa z System.Text.Json na NewtonsoftJson:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers()
    .AddNewtonsoftJson();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle

3. Tworzymy akcję w kontrolerze:

    [HttpPatch("{id:int}")]
    [ProducesResponseType(StatusCodes.Status400BadRequest)]
    [ProducesResponseType(StatusCodes.Status404NotFound)]
    [ProducesResponseType(StatusCodes.Status204NoContent)]
    public IActionResult UpdatePartialBook(int id, JsonPatchDocument<BookDto> bookPatchObject)
    {
        if (bookPatchObject == null || id == 0)
        {
            return BadRequest();
        }

        var book = //Code to get book from DB (or any other data source)
        if (book == null)
        {
            return NotFound();
        }

        bookPatchObject.ApplyTo(book, ModelState);
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        return NoContent();
    }


I właściwie tyle :)


Teraz możemy przetestować naszą metodę w akcji. Przykładowo zmienimy autora dla pierwszej książki:

Przed zmianą:


Wywołujemy partial update:


Po zmianie potwierdzamy, że aktualizacja się powiodła:

Brak komentarzy:

Prześlij komentarz