没有结果的API和返回错误的API需要不同处理。一次成功搜索可能在查询范围内无任何地点返回。而网络错误、限制达成或源不可用则不能根据搜索结果得出结论。
对于ROOTE,先检查HTTP响应,再检查业务状态、预期集合和覆盖范围。该流程避免在服务调用失败时显示“无厕所”,或在超时后显示“无停靠点”。
解读响应的三个层级
| 层级 | 需检查内容 | 可能结论 |
|---|---|---|
| 传输层 | 连接、超时和HTTP状态 | 请求成功吗? |
| 合约层 | 有效JSON,版本和预期字段 | 响应可用吗? |
| 业务层 | 状态、集合、覆盖、警告和元信息 | 查询范围内有什么信息? |
HTTP 200不代表搜索有效。响应可能显示部分执行或错误状态。相反,路由的404不是表达空集合的正常方式:请检查URL和合约。
理解success, empty, partial和error状态
| 状态 | 建议处理 |
|---|---|
| success | 验证后展示实体,保留限制信息 |
| empty | 提示该搜索无返回结果 |
| partial | 展示可用信息及其警告 |
| error | 将搜索视为不可用;不作无地点结论 |
无结果关系到已知请求和数据源,不代表物理服务不存在。覆盖不全面、限制条件或过滤可能减少结果。
为您的界面设计决策树
1. La requête a-t-elle abouti ?
Non → indisponibilité réseau ou délai dépassé.
2. Le statut HTTP est-il acceptable selon le contrat ?
Non → traiter le code et le message d'erreur.
3. Le JSON respecte-t-il le schéma attendu ?
Non → réponse inexploitable, jamais "aucun résultat".
4. Le statut métier est-il error ?
Oui → recherche indisponible.
5. Le statut est-il partial ou la couverture limitée ?
Oui → résultats utilisables + avertissement.
6. La collection attendue est-elle vide ?
Oui → aucun résultat retourné dans ce périmètre.
Non → afficher les résultats et leurs limites.
按正确顺序验证参数
先检查纬度和经度、顺序及返回城市。再核对半径单位和筛选词汇。API服务用types=toilets,地图URL用modes=toilets。这些参数属于不同合约。
接着逐维度放宽范围:增加半径至路径限制内,或取消过滤做明确测试。保留初始请求记录。如自动扩展,请告知用户新范围。
处理数据源不可用时不影响其他源
部分响应可含有响应源的地点信息,另一源失败时仍保留这些结果、归属和相关警告。不要将列表视为完整,亦勿用默认值替代缺失字段误导用户。
如果策略允许,缓存的过时信息也可用,但须标识为过时。请求接收时间不会刷新原始观测时间。
调整消息和恢复机制
| 情况 | 需在界面调整的提示信息 | 操作建议 |
|---|---|---|
| empty | 该区域及过滤条件下无结果返回 | 更改区域或过滤条件 |
| partial | 部分结果可用;搜索未完成 | 显示结果及警告 |
| 验证错误 | 搜索包含无效参数 | 修正请求 |
| 认证或权限问题 | 无权执行此搜索 | 核验证账户或令牌 |
| 限制或不可用 | 搜索暂时不可用 | 遵从恢复指令 |
针对429错误,查看服务指令及可能的Retry-After。400错误需修正参数;重复请求无效。若用户已提供令牌,勿自动匿名调用替代401错误。
发布前测试四种状态
准备完整、空、部分、错误响应,以及无效JSON和超时测试。核对显示信息、保留结果和重试次数。关键测试是故障不会误判无服务。
常见问题
空列表证明没有厕所吗?
否。仅表示该搜索及数据源未返回结果。
能否展示部分响应?
可以,前提是实体有效且保留警告及限制。
所有错误都需重试吗?
不。需修正参数或访问错误;重试仅限暂时性故障并遵循服务指令。