我正在一起使用仆人和持久性。我有一个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我编辑了我的帖子,解决您的评论。我有没有错过这一点?谢谢。 –