我正在一起使用僕人和持久性。我有一個User
實體,我想知道是否有可能只響應其字段的一個子集,具體取決於上下文。一個持久實體的多個JSON實例
讓我們考慮以下兩個端點:
type UserAPI = "user"
:> Capture "username" Username
:> Get '[JSON] (Entity User)
type ProfileAPI = "profiles"
:> Capture "username" Username
:> Get '[JSON] (Entity User)
type AppAPI = UserAPI :<|> ProfileAPI
這裏是我們的User
型號:
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
User json sql=users
username Text
email Text
password Text
token Text
bio Text Maybe default=NULL
image Text Maybe default=NULL
createdAt UTCTime default=now()
updatedAt UTCTime Maybe default=NULL
UniqueUser username email
deriving Show
|]
當GET /user
請求到達時,讓我們說,我們只是想和email
和token
用於認證目的響應。另一方面,當GET /profile/:username
請求到達時,我們只需要回覆username
,bio
和image
。
我們該如何做到這一點?謝謝。
更新:我相信這是可能通過使用不同的記錄特定表持久類型和僕人的請求類型之間「轉換」。例如,一個由Persistent使用,另一個用作與客戶端的接口。但是,這可能需要在兩者之間進行轉換的功能。隨着邏輯的發展,我認爲事情會變得麻煩。另外,我在想,定義ToJSON和FromJSON實例可以做到這一點,但是我無法將它包裹起來。
@AlexisKing我編輯了我的帖子,解決您的評論。我有沒有錯過這一點?謝謝。 –