Tôi đang tạo một dịch vụ web CRUD khá đơn giản trong Haskell với Warp (và có thể là Scotty) và trạng thái axit.Phân tích cú pháp các đối tượng json một phần bằng aeson trong haskell
Trong trạng thái axit I lưu trữ Bản ghi người dùng trong Data.Map (theo ví dụ this). Tôi biết rằng những hồ sơ đó sẽ luôn hoàn thành khi sáng tạo, vì vậy tôi không cần phải hội đủ điều kiện với rất nhiều MightS. Tuy nhiên, khi cập nhật một Người dùng, máy khách có thể chọn gửi một đối tượng json một phần, chỉ với một số trường được điền.
Cách thành ngữ để đại diện cho điều này là gì? Nếu tôi có một khai báo dữ liệu, FullUser, không có MaybeS và một chính xác giống với MaybeS trước tất cả các khóa tùy chọn, PartialUser, và để aeson tự động lấy mã và giải mã cho sau này, cuối cùng viết chức năng cập nhật của riêng tôi về loại :: FullUser -> PartialUser -> FullUser?
Nó sẽ không có nhiều mã, nhưng nó cảm thấy hơi xấu xí và giống như nó vi phạm DRY một chút. Nó nên là một nhiệm vụ phổ biến trong một máy chủ web, vì vậy có lẽ nó đã được giải quyết một cách tổng quát (có thể với TH)?
Tôi nhận ra rằng tôi có thể lưu trữ chuỗi json và luôn kiểm tra các phím bị thiếu, làm cho nó hơi vụng về nhưng bằng chứng trong tương lai cho thay đổi lược đồ, nhưng tôi vẫn muốn biết làm thế nào tôi sẽ làm điều đó " đường.
EDIT: Hoặc có lẽ tôi chỉ nên sử dụng FullUser và sử dụng ống kính aeson để viết chức năng cập nhật đơn giản từ FullUser và chuỗi json?
Cảm ơn bạn đã nhập! Vâng, việc đặt tên chỉ để làm cho câu hỏi rõ ràng hơn. Kể từ khi trường hợp được tạo ra sẽ không đủ trong trường hợp này, tôi nghĩ rằng tôi sẽ đi với một chức năng cập nhật mà có một FullUser và một chuỗi json và sử dụng ống kính aeson (và có lẽ là một ống kính cho FullUser) để cập nhật nó. – Gurgeh