monstrikus / infinity_scroll_php
大型对象传输控制协议
Requires
- php: ^7.4
- ext-json: *
- illuminate/database: *
- illuminate/http: *
- illuminate/validation: *
- laravel/framework: *
Requires (Dev)
- ext-pdo: *
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-07 13:28:23 UTC
README
摘要
大型对象传输控制协议(LOTCP)是一种客户端和服务器之间独立于语言的同步通信格式。
本文件为应用程序之间的互操作性建立了通用标准,是互操作性(功能兼容性)的主要指南。
本文件的现状
本文件定义了LOTCP跟踪协议。
本文件的制定受以下标准的制定所影响
- RFC 7159 (JSON)
本备忘录的分发有限(仅限内部使用)。
版权声明
MIT许可证
版权(c)2023 Aleksei Vlasov, Vlad Saliy。
在此特此免费许可,任何获得本软件及其相关文档副本(“软件”)的个人都可以不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向软件提供的人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的还是其他保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论该责任是因合同、侵权或其他方式引起的,与软件或软件的使用或其他方式有关。
目录
- 介绍 1.1 要求 1.2 术语 1.3 总体操作
- 命名约定和类型命名约定 2.1 命名约定 2.2 类型命名约定
- 协议参数 3.1 请求 3.2 响应 3.3 过滤器 3.4 页面 3.5 头 3.6 元数据 3.7 选择 3.8 同步
1. 介绍
1.1 要求
本文档中的关键字“必须”、“禁止”、“必需”、“应当”、“禁止”、“应该”、“不应该”、“推荐”、“可以”和“可选”的解释与RFC 2119中所述的解释相同。
如果一个实现无法满足其实施的协议中一个或多个必须或要求级别的需求,则该实现不合规。如果一个实现满足其实施协议中的所有必须或要求级别和所有应该级别要求,则称其为“无条件合规”;如果一个实现满足其实施协议中的所有必须级别要求,但不是所有应该级别要求,则称其为“条件合规”。
1.2 术语
- 请求 - 尝试从服务器获取数据。
- 响应 - 从服务器获取数据。
- 客户端 - 一个用于发送请求而建立连接的程序。
- 服务器 - 一个通过发送响应来处理请求的应用程序。任何程序都可以既是客户端又是服务器。
1.3 总体操作
LOTCP协议是一种请求/响应协议。客户端通过任何通信通道以JSON形式向服务器发送请求。服务器以带有同步标签的JSON响应客户端。
请求基于JSON构建,并在请求中定义了必要的参数。
服务器可以忽略请求参数。服务器必须发送新的请求参数。客户端必须根据服务器的要求更改请求参数。
响应基于JSON构建,并在响应中定义了必须参数。
2. 命名约定和类型命名约定
2.1 命名约定
- 有效负载 - 传输的数据。
- 头部 - 数据的附加参数;传输数据的属性/描述。
- 元数据 - 客户端和服务器同步的通信数据。
- countItems - 元素的数量。
- identifyKey - 识别键的名称。
- totalItems - 服务器上存在的元素数量。对象的大小。
- page - 关于页面或需要获取的页面的信息。
- hasNext - 对象尚未完全接收的信息。
- nextIdentify - 关于客户端和服务器同步的信息。
- totalPages - 已存在页面的数量。
- currentPage - 当前页面。
- nextPage - 下一页。
- prevPage - 上一页。
- to - 必须的元素数量。
- filter - 关于过滤对象元素的信息。
- select - 对象处理。构建对象的映射。
- name - 操作/函数/对象的名称。
- value - 依赖于上下文。值或相关数据。
2.2 类型命名约定
boolean - 布尔 - bool
true的字节:01110100 01110010 01110101 01100101
十六进制:74 72 75 65
string - STRING - String
ABC 123的字节:01000001 01000010 01000011 00100000 00110001 00110010 00110011 十六进制:41 42 43 20 31 32 33
number - 整数 - int
1的字节:00110001 十六进制:31
array - Array - 数据集合。
int[2] = {1, 2, 3}; // C++ or Java [1,2,3]; // JavaScript or PHP
JSON | XML | BASE 64
JSON - RFC 8259. XML - RFC 5364. BASE 64 - RFC 4648。
3. 协议参数
3.1 请求
如果您需要获取不带数据参数 [to = -1] 的配置。
// Request object { "identifyKey": "uuid", "to": 25, "filter": [ { "name": "SORT", "identifyKey": "date", "value": "ASC" }, { "name": "BETWEEN", "identifyKey": "date", "value": "[\"1970-01-01\",\"1970-12-31\"]" } ], "page": 1, "nextIdentify": "Ub7AZUwxNu...", "select": ["uuid", "name", "date"] }
3.2 响应
// Response object { "payload": [ {"uuid": "Ub7AZUwxNu..."}, {"uuid": "AZNuUb7AZU..."} ], "header": { "countItems": 2, "identifyKey": "uuid" }, "meta": { "totalItems": 100, "page":{ "totalPages": 4, "currentPage": 1, "nextPage": 2, "prevPage": 0 }, "hasNext": true, "nextIdentify": "NuUbUwxNu..." } }
3.3 过滤器
过滤器旨在过滤数据(排序)。服务器可能会由于过滤器的缺失或传递给过滤器的数据不正确而忽略过滤器。过滤器的最小列表。它们的必须存在。
描述对象的基线参数。
示例JSON
// Filter object { "name": "SORT", "identifyKey": "date", "value": "ASC" }
3.4 页面
页面描述了页面(如书籍页面)的行为逻辑。
此对象依赖于请求参数 [to, page] 的 [关于请求](#user-content-3-1-request)。如果这些参数不存在,则当前对象不会出现在服务器响应中。
描述对象的基线参数。
示例JSON
// Page object { "totalPages": 4, "currentPage": 1, "nextPage": 2, "prevPage": 0 }
3.5 头部
标题描述了有效负载中包含的数据。
描述对象的基线参数。
示例JSON
// Header object { "countItems": 2, "identifyKey": "uuid" }
3.6 元信息
元信息对象用于客户端和服务器之间的协调或通信。此对象对于客户端理解如何获取其他信息是必要的。
描述对象的基线参数。
示例JSON
// Meta object { "totalItems": 100, "page":{ "totalPages": 4, "currentPage": 1, "nextPage": 2, "prevPage": 0 }, "hasNext": true, "nextIdentify": "NuUbUwxNu..." }
3.7 选择
选择用于处理对象。使用此对象,您可以指定客户端期望的对象。
示例JSON
// Select object ["uuid", "name", "date"]
3.8 同步
此协议支持客户端和服务器之间的同步。同步在每个时钟周期(请求/响应)发生。对于提前同步,客户端可以请求零时钟周期。使用[to = 0]将不会得到结果。因为0将被视为未配置。要得到结果,请使用[to = -1]
如果您需要获取不带数据参数 [to = -1] 的配置。
示例请求
// Request object { "identifyKey": "", "to": -1 }
示例响应
// Response object { "payload": [], "header": { "countItems": 0, "identifyKey": "uuid" }, "meta": { "totalItems": 100, "hasNext": true, "nextIdentify": "NuUbUwxNu..." } }