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

2024-02-15

在我们的 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
  }
}

问题是请求此数据的最佳格式。我们考虑了 3 种方法。

1. 查询参数

客户端应添加?rules参数到端点并发送请求。

所以这两个请求会有不同的行为:

  • POST /v1/register-account— 创建帐户。
  • POST /v1/register-account?rules— 仅响应每个字段的规则列表。

但我不太确定这是实现此功能的优雅方式。在我们的项目中,我们也将为过滤器实现此功能(我的意思是客户端将能够获取过滤器的验证规则)。所以我认为在这样的情况下它看起来会有点难看:

  • GET /v1/products?vendor=33— 列出 33 家供应商的产品。
  • GET /v1/products?rules— 获取所有可用过滤器的验证规则。

但我的同事喜欢这种方式。

2. Accept header

另一个想法是允许客户端设置自定义application/rules+jsonMIME 输入Accept标头将由 API 确定优先级,如果 API 在此标头中满足此 MIME 类型,它将使用验证规则进行响应。

但我们不太喜欢这个主意,因为Acceptheader 应该只修改响应的表示(格式)。我的意思是,如果您想要 XML 格式的响应,您可以添加application/xml到标题;如果你想要 JSON — 你将其设置为等于application/json。然而,自定义 MIME 类型的想法与表示无关,它绝对是另一种数据!

3.另一个端点

我个人喜欢的一种方式是另一个端点。当客户端发送GET /v1/rules?endpoint=/v1/register-account&method=POSTAPI 只是简单地响应给定端点的验证规则。


我想知道你的意见。您会选择哪种方式?为什么?也许你还知道这里没有列出的其他好方法。


JSON 架构 http://json-schema.org/是一个广泛接受的用于验证 JSON 数据的词汇。如果您使用这个而不是您自己的,那就最好了。

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

至于端点,您可以简单地使用OPTIONSHTTP 方法。所以OPTIONS /v1/register-account应返回使用该端点的要求(包括架构)。看本文 http://zacstewart.com/2012/04/14/http-options-method.html举个例子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为 API 客户端提供端点的最新验证规则? 的相关文章

  • 如何使用循环构建 json 对象?

    我正在尝试循环遍历多个项目 并创建一个 json 对象 每个循环都应该是对象上的一个新项目 但我在执行此操作时遇到了一些问题 似乎只添加了一组项目 而不是多个项目 这是我的代码 jsonObj rows each function inde
  • 该捆绑包无效。 Apple 目前不接受使用此版本操作系统构建的应用程序。 (小牛队)

    我首先说我已经安装了 Mavericks 我很好奇看到新功能 最好还是等待 因为 显然 没有什么耸人听闻的变化 无论如何 我正在尝试将我的应用程序提交到应用程序商店 但经过与代码签名的真正艰苦斗争后 我最终得到了以下消息 此捆绑包无效 Ap
  • 简单的跨平台 TCP IP API?

    我不打算使用像 QT 或 wxWidgets 的 API 这样的大东西 我只想要可以在 Android iOS Windows Mac Linux 上运行的简单套接字 我正在制作一个事件驱动的纸牌游戏 所以 TCP 是最好的 本质上 我只想
  • 我想使用 Sequelize 将 MySQL 中的对象数组存储在单个列中

    之前我正在寻找如何使用 Sequelize 在 MySQL 中插入对象数组 然后我找到了一种直接插入数组的解决方案 例如 1 2 在单列中 insert into TABLE NAME id marks VALUES 21 1 2 但我正在
  • 如何 json_normalize() df 中的特定字段并保留其他列? [复制]

    这个问题在这里已经有答案了 这是我的简单示例 我的实际数据集中的 json 字段非常嵌套 因此我一次解压一层 我需要在 json normalize 之后保留数据集上的某些列 https pandas pydata org docs ref
  • 使用 Ruby 验证 Jenkins 插件表单

    我正在用 Ruby 开发一个 Jenkins 插件 您应该能够配置连接到服务器的每个节点 以便在该节点失去与主服务器的连接时将电子邮件发送到指定的地址 EmailNodeProperty添加一个字段来输入电子邮件地址 Save an ema
  • 发送 Microsoft Graph 请求事件返回 400

    我能够通过将 JSON 请求发布到https graph microsoft com v1 0 me calendar events https graph microsoft com v1 0 me calendar events 我已经
  • 您可以使用 JSONP 检索您的 Skype 状态吗?

    有谁知道使用 JSONP 获取 Skype 状态的 URL 到目前为止我只找到了一个 XML 状态 URL http mystatus skype com username xml 我正在尝试使用 AJAX 查询 Skype 是的 我可以使
  • 使用 PHP 将表单数据发送/发布到 URL [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我有一个通过 POST 提交的表单 提交表单后我捕获变量 如何连接表单数据 然后将其 POST 到 url 然后重新定向到感谢页面 这不是确
  • MySQL JSON 存储与两个表

    与使用单独的元表相比 使用 JSON 在表中存储数据有什么好处吗 这是原始架构 Users Table UserId Username Etc 5 John Avatar Table Id UserId ImageName ImageTyp
  • 从平面数组创建嵌套对象

    我目前有一个对象数组 我正在尝试将其重塑为嵌套对象ID作为对象键 并将其作为目标ID与parentid 如果不是 0 我尝试了几种方法 但我很挣扎 主要绊脚石for me是超过一两层深度的任何东西 理想情况下 我需要它是动态的 这样它就可以
  • 使用XMLHttpRequest自动网页刷新内存泄漏

    问候 我一直在为一些使用 8 位微控制器的硬件开发网络界面 该网页使用 HTML javascript JSON 和 XHR XMLHttpRequest 进行通信 我想做的是创建一个页面 使用 setInterval 使用控制器中的新值每
  • 使用 React Hook Form 和 Yup 进行文件输入验证

    我尝试使用 React Hook Form 进行文件输入验证 是的 我写了下面的代码 但是当我测试文件的大小时 它在这里显示console log value 0 size 即使我在文件输入中选择了一个文件 该值也是未定义的 这有什么问题吗
  • Web Api - 不允许捕获 405 方法

    截至目前 Web api 应用程序针对 405 方法不允许错误返回以下响应正文 我正在尝试更改响应正文 但我不知道如何使用委托处理程序 ApiControllerActionSelector 或过滤器 谁能帮我捕获服务器端的 405 错误
  • 使用 AWS API Gateway 和 Lambda 从 multipart/form-data 获取非文件正文

    我正在尝试从multipart form data POST通过 API 网关连接到我的 AWS Lambda Web 服务 超文本传输 协议POST具有内容类型 multipart form data 和 URL 编码的正文 文件数据也在
  • 如何获取优酷access_token

    我在哪里可以找到access token refresh token在我的优酷账号里 我找到了如何使用外部脚本通过 API 将视频上传到 youku com 但我需要access token refresh token使用它 您需要对优酷应
  • Rails simple_form:自定义输入id

    我想把用Rails simple form生成的几个表单放在一页上 并用javascript对它们进行操作 然而 simple form 为表单中的各个输入生成了相同的 id 因此我想用我自己的 id 替换生成的 id 现在我有一行 和 H
  • 如何限制 JSON 访问?

    我有一个 Web 应用程序 可以从新创建的 JSON API 中提取数据 我的静态 HTML 页面通过 JavaScript 从静态 HTML 页面动态调用 JSON API 如何限制对 JSON API 的访问 以便只有我 我的网站 可以
  • 使用 PHP 和 jSON 从 MySQL 获取 UIImage

    我正在开发一个小型新闻阅读器 它通过对 URL 执行 POST 请求来从网站检索信息 响应是一个带有未读新闻的 JSON 对象 例如 应用程序上的最新新闻的时间戳为 2013 03 01 当用户刷新表时 它会发布 domain com ap
  • 当 AngularJS 表单无效时禁用提交按钮

    我的表格是这样的

随机推荐

  • 在 Android Activity 中从软件键盘监听 Webview 按键事件

    是否可以在 Android 主机应用程序中处理来自 Web 视图的软件键盘事件 例如 我的应用程序的 Activity 是否可以侦听显示 Google 网站的 Web 视图的搜索字段中键入的内容 考虑到下面描述的方法 如果我覆盖它返回 tr
  • 如何在 Python 中使用递归反转列表?

    我想要一个函数 它会使用递归返回给定列表的相反内容 我怎样才能做到这一点 将列表的第一个元素附加到反向子列表 mylist 1 2 3 4 5 backwards lambda l backwards l 1 l 1 if l else p
  • XML 解析使用但元素名称是动态的

    Simple XMLElement Object IpStatus gt 1 ti pid 20642 gt SimpleXmlElement Object 我有一个上面格式的 SimpleXMLElment 这个 XML 是在运行时生成的
  • Sailsjs 是否可以构建更复杂的模型

    我想在我的模型中包含数组或集合 这对于水线 mongoDB 来说是可能的吗 周围还有其他选择吗 example name Bundle col1 name anOtherModel subCol text aString col2 name
  • 在大表上使用 LIKE 操作时 MySQL 查询速度慢

    我有一个相当大的表 6 GB 并且在此查询上遇到性能问题 SELECT f TIME FORMAT f scheme H i as scheme TIME FORMAT f actual H i as actual DATE FORMAT
  • 获取 Matplotlib 绘图标签坐标

    我想访问图中的所有标签坐标 例如 我画两条线并显示图例 import matplotlib pyplot as plt plt plot 1 2 label first image plt plot 2 1 label second ima
  • 如果第一个元素是异常,为什么引发元组有效?

    我很难弄清楚这一点 它是关于在 Python 2 7 中引发异常时可能发生的错误 try raise 1 2 3 4 except Exception as ex print ex 这里的消息是 异常必须是旧式类或派生自 BaseExcep
  • Iron Router 数据触发 3 次

    我在 Router Config 上设置了一个带有加载模板的路由器 Router onBeforeAction loading this route clients path clients template clientsAll wait
  • 设置日期标头以降低 SpamAssassin 分数

    我使用了测试服务 verifier port25 com 来检查从我的 PHP 脚本发送电子邮件时发生的情况 由于某种原因 即使启用了 SPF 和 DKIM 它们最终还是出现在我的 GMail 垃圾邮件文件夹中 事实证明 SpamAssas
  • C# - 对基元数组进行排序并跟踪其索引的最快方法

    我需要一个float 待排序 我需要知道旧索引在新数组中的位置 这就是为什么我不能使用Array Sort 管他呢 因此 我想编写一个函数来对数组进行排序 并记住它从哪个索引获取每个值 float input new float 1 5 2
  • 强制变量仅保存某些值

    我正在使用 vs 2012 我有一个简单的字符串属性 string someString public string MyString get return someString 我希望该属性仅保留某些值 这样 当客户端使用此属性时 只能使
  • Amazon SimpleDB 用于开发环境/本地安装

    有没有一种方法 工具可以模拟Amazon的SimpleDB以进行开发 在我的上述探索中 我发现这个工具 http mac wareseeker com Tools simpledb dev 0 1 5 zip 3000833但这是针对 Ma
  • 通过内联汇编操作c变量[重复]

    这个问题在这里已经有答案了 可能的重复 如何访问 c 变量以进行内联汇编操作 https stackoverflow com questions 14617953 how to access c variable for inline as
  • .net core build 生成本地化文件夹

    我有一个使用 net core 2 0 的 web asp net 解决方案 我正在使用以下命令构建它 dotnet publish MySolution sln configuration release output d test ou
  • `new_root.mainloop()` 不会使主窗口无响应

    假设我有这个 tkinter 脚本 import tkinter as tk def callback new root tk Tk new root mainloop print Done root tk Tk button tk But
  • 由于“仅允许安全来源”而无法使用 navigator.geolocation

    自从我使用以下命令创建网站以来 控制台中出现错误navigator geolocation getCurrentPosition 以下 我意识到这会在未来的某个时候引起问题 而且由于我只玩网络开发 所以我并没有太担心 但它现在已经完全搞砸了
  • 无法与 WPA2 android 连接

    我正在使用以下代码与 Android 中的 WPA2 连接 我可以与 WEP 和 WPA 连接 但我只获得 扫描 状态 我无法连接 WPA2 网络 你能告诉我需要进行哪些更改才能使此代码与 wpa2 WiFi 相关吗 private boo
  • SQLite3如何使用索引?

    我正在研究 SQLite3 索引 这是一个表 COMPANY CREATE TABLE COMPANY ID INT PRIMARY KEY NOT NULL NAME TEXT NOT NULL AGE INT NOT NULL ADDR
  • 如何在软件中将两个物理串行端口相互桥接(并记录穿过的数据)?

    基本上 我想将我的计算机放在串行线中间并记录通过它的对话 我正在尝试对这段对话进行逆向工程 并最终模拟对话的一端 我正在尝试做的事情的粗略图 通常 我有这个 Device 1 lt gt Device 2 我想做这个 Device 1 lt
  • 如何为 API 客户端提供端点的最新验证规则?

    在我们的 API 中 我们希望实现允许客户端提取验证规则的解决方案 同步验证规则和 您的密码应该是 8 100 个符号 等字段下的任何有用文本将很有用 例如 当客户端请求注册验证规则时 API 使用以下 JSON 进行响应 email ht