haskell - 正确处理 Servant 中的无效查询参数
问题描述
我正在跟随Servant 教程,并且我定义了以下 API 类型:
type UsersAPI = "users" :> QueryParam "sortby" SortBy :> Get '[JSON] [UserData]
data SortBy = Id | Name | Age
instance FromHttpApiData SortBy where
parseQueryParam input =
case toLower input of
"name" -> Right Name
"age" -> Right Age
_ -> Left $ append "Invalid sort order: " input
listUsers :: Maybe SortBy -> Handler [UserData]
listUsers = return . Db.getUsers . fromMaybe Id -- Db.getUsers just returns a a sorted in-memory list...
-- rest of implementation ommitted for brevity
有些事情显然是正确的,因为如果我curl localhost:8081/users?sortby=name
或curl localhost:8081/users?sortby=age
我得到一个正确排序的列表。但是,有些东西也坏了,因为curl localhost:8081/users?sortby=foo
没有给我预期的Invalid sort order: foo
. 相反,我得到
parse error: Invalid numeric literal at line 1, column 6
我究竟做错了什么?
解决方案
推荐阅读
- angular - Ethers.js && Angular:
- django - Django 请求跨不同浏览器的会话一致性
- ios - 放大 ImageView 边界
- laravel - 使用 spatie/laravel-fractal 检索与用户相关的角色列表,权限完美运行
- firebase - Cloud Firestore 是否使用换行符 \n 字符(多行)保存字符串?
- android - 有没有办法在您的 android 设备/模拟器上发送 http post 请求而不会收到此错误?
- php - 邮递员发布请求返回 null
- esp8266 - ESP8266 - 如何获取当前的 SSID?
- docker - 如何更新 Hyperledger Fabric 中的链码?
- java - 如何在 Kubernetes 的 POD 中获取特定应用程序(在多个正在运行的应用程序中)提供的特定请求?