您的 IPv4 地址:
操作系统:
运营商:

什么是 Web 服务?

Web 服务是一种接口,应用程序通过它在网络上交换数据或调用功能。网站主要是给人阅读和使用的;而 Web 服务对外提供的是一份面向软件客户端的契约。同一个产品可以同时提供这两者。许多服务使用 HTTP 和 JSON,但这个概念也涵盖其他协议和数据格式。

请求与响应是如何进行的

客户端向指定的端点发送请求,其中包含方法、参数,必要时还附带凭据。服务对请求进行校验,执行相应操作,然后返回响应。对于 HTTP API,状态码用来区分大致的结果:成功响应、客户端问题(例如输入无效),或者服务器端故障。响应体通常会按文档约定的格式提供更多细节。

一份清晰的契约会描述路径、方法、字段、类型、身份验证、速率限制和错误情况。有了这份契约,客户端就可以独立开发。版本管理非常重要,因为即使端点地址不变,修改某个字段或它的含义也可能导致现有应用出错。在承诺过的范围内保持向后兼容,并公布弃用期限。

常见的接口风格

REST 是一种架构风格,而不是某种单一的传输格式。被称为 RESTful 的 HTTP API 通常用 URL 表示资源,用 GET 读取数据,用 POST 或 PUT 进行修改。GET 不应造成持久的状态变化,因为客户端和中间节点可能会重复发送或缓存它。许多企业系统使用 SOAP,它采用结构化的 XML 消息和正式的服务描述。

GraphQL 允许客户端通过 schema 请求指定的一组字段,通常基于 HTTP。它可以减少不必要的数据传输,但也会在查询开销、授权和缓存方面带来额外的复杂性。Webhook 则颠倒了常见的轮询模式:当某个事件发生时,由一个服务去调用预先登记的端点。Webhook 需要验证发送方的身份、处理重试,并防范重复投递。这些方法没有哪一种是放之四海而皆准的最佳选择。

安全与隐私

使用 HTTPS 保护传输中的数据,并验证服务器证书。采用合适的凭据方案验证调用方身份,并对每个操作和每个对象分别进行授权。有效的令牌只代表其权限范围内的授权,并不能让任意输入都变得安全。请校验请求的大小和类型,避免在错误信息中暴露私密数据,并设置限额以防滥用。

密钥不应出现在公开的 URL、客户端源代码或日志中。一旦凭据泄露,请立即轮换,限制其权限范围,并为生产环境和测试环境使用不同的凭据。对于接受回调 URL 的 API,请校验目标地址,防止请求被导向内部网络。在文档中说明会返回哪些个人数据,并且只保留确有需要的数据。

可靠性与性能

网络总会出故障,因此客户端需要设置超时、有限次数的重试,并明确处理部分失败的情况。读取操作在安全的前提下可以重试;而重试付款或其他修改操作,则需要幂等设计来避免重复执行。分页可以限制大型结果集。对于稳定的公开数据,缓存可以减轻负载;而变化频繁或私密的响应则需要谨慎制定缓存策略。

运维人员应当从客户端的实际访问路径测量延迟、错误率和可用性。即使服务器返回 HTTP 200,数据也可能不完整或无法使用,因此还要监控预期的业务结果。速率限制可以保护服务,但应以可预期的方式告知调用方。如果服务对用户很重要,请提供状态页面或支持渠道以便处理故障。

选择或构建服务

先从用户要完成的任务和数据契约入手,再选择客户端能够实现、团队能够维护的接口风格。测试正常响应、格式错误的输入、过期的凭据、权限、分页和超时等情况。及时更新示例,并展示具体的错误。接入第三方服务时,请阅读其使用限制、数据政策和变更通知;再方便的端点也依然是一项可能出故障的依赖。