Wdrażam "PATCH" po stronie serwera w celu częściowej aktualizacji moich zasobów.Częściowe aktualizacje za pomocą PATCH: jak analizować dane JSON dla aktualizacji SQL?
Zakładając zrobić nie narazić moje SQL schematu bazy danych w JSON żądania/odpowiedzi, a więc istnieje oddzielny mapowanie między kluczy w JSON i kolumn tabeli, w jaki sposób najlepiej która kolumna (e) postać z aktualizacji w języku SQL, biorąc pod uwagę JSON częściowej aktualizacji?
Na przykład, załóżmy, że moja tabela ma 3 kolumny: col_a
, col_b
i col_c
i mapowanie między klawiszami JSON do kolumn tabeli wynosi: a -> col_a, b -> col_b, c -> col_c
. Biorąc JSON-PATCH
dane:
[
{"op": "replace", "path": "/b", "value": "some_new_value"}
]
Jaki jest najlepszy sposób programowo zastosować tę częściową aktualizację do col_b
tabeli odpowiadającej moim zasobu?
Oczywiście mogę zakodować te mapowania w A keys_to_columns
dict gdzieś, i na każde żądanie z jakimś patch_data
mogę zrobić czegoś tak:
mapped_updates = {keys_to_columns[p['path'].split('/')[-1]]: p['value'] for p in patch_data}
następnie użyć mapped_updates
skonstruować instrukcję SQL dla aktualizacji DB. Jeśli powyższe wyrzuci KeyError
wiem, że dane żądania są nieprawidłowe i mogą je wyrzucić. I będę musiał to zrobić dla każdego stołu/zasobu jaki mam.
Zastanawiam się, czy istnieje lepszy sposób.
Chyba chcesz tę warstwę abstrakcji, abyś miał możliwość zmiany schematu DB bez wpływu na interfejs API REST? –
@MartinKonecny, tak, również mogę po prostu ukryć semantykę schematu DB z dala od użytkowników API. – MLister
Myślę, że potrzebna jest trzecia warstwa, która znajduje się nad bazą danych, która serializuje i wykonuje zapytania/aktualizacje i reprezentuje dane w żądanej formie na poziomie interfejsu API. np .: [JSON Schema] (http://json-schema.org/), co jest miłe, ponieważ możesz również potwierdzać, dokumentować i utrzymywać zasoby i API elastyczne. –