为 Sahara 添加分页和排序功能¶
https://blueprints.launchpad.net/sahara/+spec/pagination
本文档描述了为 Sahara 的 API、CLI 和 Dashboard 添加分页功能的可选项。同时,本文档也描述了为 Sahara API 添加排序功能。
问题描述¶
我们正在努力添加对象的分页功能。但是,显示过多的对象对用户来说不太友好。我们希望实现分页功能,以便 Dashboard 可以分割页面列表,从而改善用户界面。用户可以在 Dashboard 中按列对对象进行排序,但如果我们添加分页功能,则需要在 API 中添加排序功能,因为仅在 UI 端进行排序会带来不便,因为服务将继续以默认列的顺序返回页面。
提议的变更¶
将在返回对象列表的 API GET 请求中添加四个可选参数。
注意
现在列表中的元素按创建日期排序。
marker - 列表中最后一个元素的索引,该元素不会包含在响应中。
limit - 响应中元素的最大数量。此参数必须是正整数。如果未传递此参数,响应将包含所有后续于 marker 参数中 id 对应的元素的列表。 此外,如果未传递 marker 参数,响应将包含列表中的前几个对象,数量等于 limit。 如果未传递这两个参数,API 将像往常一样工作。
sort_by - 用于排序的对象的字段名称。如果传递此参数,对象将按创建日期排序,否则将按此字段排序。
对于每个对象,该字段可以具有以下值之一
对于节点组模板:name、plugin、version、created_at、updated_at
对于集群模板:name、plugin、version、created_at、updated_at
对于集群:name、plugin、version、status、instance_count
对于作业二进制文件和作业二进制文件内部:name、create、update
对于数据源:name、type、create、update
对于作业模板:name、type、create、update
对于作业:id、job_template、cluster、status、duration
默认情况下,Sahara API 将以升序返回列表。 此外,如果用户需要降序列表,可以使用 - 前缀作为 sort_by 参数。
示例
按名称升序排列获取作业列表。
请求 GET http://sahara/v1.1/775181/jobs?sort_by=name
按名称降序排列获取作业列表。
请求 GET http://sahara/v1.1/775181/jobs?sort_by=-name
为了方便起见,集合包含原子“next”和“previous”标记。列表中的第一页不包含 previous 标记,列表中的最后一页不包含 next 链接。以下示例说明了集群模板集合中的页面。
示例
获取 id 为 3 的模板之后的集群模板。
请求
GET http://sahara/v1.0/775181/cluster-templates?limit=1&marker=3
response
{
"cluster_templates": [
{
"name": "cluster-template",
"plugin_name": "vanilla",
"id": "4",
"node_groups": [
{
"name": "master",
},
{
"name": "worker",
}
],
}
],
"markers":
{
"next": "32",
"previous": "22"
}
}
示例:如果 id = 5 的集群模板是集合中的最后一个,响应将仅包含“previous”链接。
请求
GET http://sahara/v1.0/775181/cluster-templates?limit=1&marker=4
response
{
"cluster_templates":[
{
"description":"",
"node_groups":[
{
"name":"master",
},
{
"name":"worker",
}
],
"name":"cluster-template-2",
"id":"5",
}
],
"markers":
{
"previous": "3"
}
}
替代方案¶
无
数据模型影响¶
无
REST API 影响¶
添加在以下请求中获取 marker、limit、sort_by 参数的能力
Sahara API v1.0¶
GET /v1.0/{tenant_id}/images
GET /v1.0/{tenant_id}/node-group-templates
GET /v1.0/{tenant_id}/cluster-templates
GET /v1.0/{tenant_id}/clusters
Sahara API v1.1¶
GET /v1.1/{tenant_id}/data-sources
GET /v1.1/{tenant_id}/job-binary-internals
GET /v1.1/{tenant_id}/job-binaries
GET /v1.1/{tenant_id}/jobs
GET /v1.1/{tenant_id}/job-executions
Sahara API v2¶
GET /v2/cluster-templates
GET /v2/clusters
GET /v2/data_sources
GET /v2/images
GET /v2/job-binaries
GET /v2/jobs
GET /v2/job-templates
GET /v2/node-group-templates
其他最终用户影响¶
无
部署者影响¶
无
开发者影响¶
无
Sahara-image-elements impact¶
无
Sahara-dashboard / Horizon 影响¶
分页将通过 Horizon 的能力添加到 Sahara-Dashboard。现在我们使用 DataTable 类来表示数据对象列表。该类支持分页功能。
实现¶
负责人¶
- 主要负责人
mlelyakin (mlelyakin@mirantis.com)
工作项¶
添加在 Sahara API 中获取
marker、limit参数的能力添加新功能单元测试。
添加在 Sahara API 中获取
sort_by参数的能力在 Sahara CLI 客户端中添加这些功能
在 Dashboard 中添加这些功能
记录分页和排序功能
依赖项¶
无
测试¶
将用单元测试覆盖。
文档影响¶
将添加到 Sahara API 的文档中。
参考资料¶
无