Tôi đang triển khai 'PATCH' ở phía máy chủ để cập nhật một phần tài nguyên của mình.Cập nhật từng phần qua PATCH: cách phân tích cú pháp dữ liệu JSON cho các bản cập nhật SQL?
Giả sử tôi làm không để lộ lược đồ cơ sở dữ liệu SQL của tôi trong các yêu cầu/phản hồi JSON, tức là có một ánh xạ riêng biệt giữa các khóa trong JSON và cột của bảng, làm cách nào để tìm hiểu xem cột nào cần cập nhật trong SQL cho JSON của một bản cập nhật một phần?
Ví dụ, giả bàn của tôi có 3 cột: col_a
, col_b
, và col_c
, và ánh xạ giữa các phím JSON để cột của bảng là: a -> col_a, b -> col_b, c -> col_c
. Với JSON-PATCH
dữ liệu: Cách tốt nhất để lập trình áp dụng cập nhật phần này để col_b
của bảng tương ứng với tài nguyên của tôi
[
{"op": "replace", "path": "/b", "value": "some_new_value"}
]
là gì?
Dĩ nhiên tôi có thể hardcode các ánh xạ trong một dict keys_to_columns
nơi nào đó, và theo từng yêu cầu với một số patch_data
, tôi có thể làm sth như:
mapped_updates = {keys_to_columns[p['path'].split('/')[-1]]: p['value'] for p in patch_data}
sau đó sử dụng mapped_updates
để xây dựng các câu lệnh SQL cho DB cập nhật. Nếu ở trên ném một số KeyError
Tôi biết dữ liệu yêu cầu không hợp lệ và có thể vứt bỏ nó đi. Và tôi sẽ cần phải làm điều này cho mọi bảng/tài nguyên mà tôi có.
Tôi tự hỏi nếu có cách nào tốt hơn.
Tôi đoán bạn muốn lớp trừu tượng này để bạn có thể linh hoạt thay đổi lược đồ DB mà không ảnh hưởng đến REST API? –
@MartinKonecny, vâng, ngoài ra, tôi có thể chỉ muốn ẩn ngữ nghĩa của lược đồ DB khỏi người dùng API. – MLister
Tôi nghĩ rằng những gì bạn cần là một lớp thứ 3 nằm trên DB của bạn mà serializers và thực hiện truy vấn/cập nhật của bạn và đại diện cho các dữ liệu ở dạng bạn muốn ở cấp API. ví dụ: [Lược đồ JSON] (http://json-schema.org/) rất hay vì bạn cũng có thể xác thực, tài liệu và giữ tài nguyên và API linh hoạt. –