Json 如何为API客户端提供端点的最新验证规则?

Json 如何为API客户端提供端点的最新验证规则?,json,forms,api,validation,Json,Forms,Api,Validation,在我们的API中,我们希望实现一个解决方案,它允许客户端提取验证规则。同步验证规则和“您的密码应为8-100个符号”等字段下的任何有用文本将非常有用 例如,当客户端请求注册验证规则时,API使用以下JSON响应: { "email": { "html5type": "email", "maxlength": 255, "required": true }, "phone": { "html5type": "tel", "minlength":

在我们的API中,我们希望实现一个解决方案,它允许客户端提取验证规则。同步验证规则和“您的密码应为8-100个符号”等字段下的任何有用文本将非常有用

例如,当客户端请求注册验证规则时,API使用以下JSON响应:

{
  "email": {
    "html5type": "email",
    "maxlength": 255,
    "required": true
  },
  "phone": {
    "html5type": "tel",
    "minlength": 11,
    "maxlength": 11,
    "pattern": "[0-9]{11}",
    "required": true
  },
  "username": {
    "html5type": "text",
    "minlength": 5,
    "maxlength": 18,
    "pattern": "[a-z0-9_]{5,18}",
    "required": true
  },
  "password": {
    "html5type": "password",
    "minlength": 8,
    "maxlength": 100,
    "required": true
  },
  "birthday": {
    "html5type": "date",
    "required": false
  }
}
问题是关于请求此数据的最佳格式。我们考虑了三种方法

1.查询参数 客户端应向端点添加
?规则
参数并发送请求

因此,这两个请求将具有不同的行为:

  • POST/v1/注册帐户
    -创建帐户
  • POST/v1/register account?规则
    -仅响应每个字段的规则列表
但我不确定这是否是实现此功能的优雅方式。在我们的项目中,我们也将为过滤器实现这个特性(我的意思是客户端将能够获得过滤器的验证规则)。所以我觉得在这种情况下会有点难看:

  • GET/v1/products?vendor=33
    -列出33的供应商的产品
  • GET/v1/products?规则
    -获取所有可用筛选器的验证规则
但我的同事喜欢这样

2. <代码>接受
标题 另一个想法是允许客户端在
Accept
头中设置自定义
application/rules+json
MIME类型,该类型将由API进行优先级排序,如果API在此头中满足此MIME类型,它将用验证规则进行响应

但我们并不真正喜欢这个想法,因为
Accept
头应该只修改响应的表示(格式)。我的意思是,如果需要XML响应,可以将
application/XML
添加到标题中;如果需要JSON格式,可以将其设置为
application/JSON
。然而,这种自定义MIME类型的想法与表示无关,它绝对是另一种类型的数据

3.另一个端点 我个人喜欢的一种方式是另一个端点。当客户端发送
GET/v1/rules?endpoint=/v1/register account&method=POST
API时,它只响应给定端点的验证规则


我想知道你的意见。你会选择哪条路?为什么?也许您知道这里没有列出的另一个好方法。

是一个被广泛接受的验证JSON数据的词汇表。最好是你用这个,而不是你自己的

由于JSON模式很流行,许多验证器存在于不同的编程语言中。使用JSON模式验证器,客户机可以根据您的JSON模式轻松验证其数据

至于端点,您可以简单地使用
选项
HTTP方法。因此
OPTIONS/v1/register account
应该返回使用该端点的要求(包括模式)。请看一个例子