响应某些请求,该请求返回带有分页的数据数量,我遇到了两个键,这些键是指向当前页面的下一页和上一页的链接。
{
"data": {
"next": "http://localhost/api/contents/posts/?page=3",
"count": 132,
"previous": "http://localhost/api/contents/posts/?page=1",
"items": []
}
}
在某些代码中,开发人员使用这些url访问下一个和上一个数据。
但是就我而言,我正在其方法调用中生成每个请求的url,并将基本URL附加在request方法中。这是我的代码:
常量类:
struct Urls {
static let baseUrl = "http://localhost/api"
// MARK:- Content Api
struct Post {
static let baseContentURL = "/contents"
static let posts = "/posts"
}
}
发布请求生成器类:
func postListByPage(_ pageNumber: String, completion: @escaping(_ inner : () throws -> Post) -> Void) {
let relativeUrl = Urls.Post.baseContentURL + Urls.Post.posts + "/?page=" + pageNumber
// get request code
}
API调用类别:
func getRequest(relativeUrl: String, tryCount: Int = 1, completion: @escaping (_ inner: () throws -> Data) -> Void) {
let url = Urls.baseUrl + relativeUrl
//send request by URLSession
}
当我能够动态处理这些请求时,我不确定下一个url的确切用法是什么,而且我认为使用此字段会破坏代码中API调用中所有层的规则。
我的问题:
答案 0 :(得分:2)
这些字段的确切用途是什么?
您使用的API希望您不使用查询参数进行分页,并手动提取页码。
一个常见的原因是因为他们遵循实际的RESTful体系结构并使用链接来更改状态,或者他们可能希望在不破坏客户端的情况下为更改其分页机制敞开大门。
如果使用这些字段更好,如何使用当前结构来做到这一点?
您的代码没有对您使用良好的API进行建模或抽象。该API的工作原理基本上是对模型的错误抽象。
所以我真的不能告诉您如何在不更改API模型的情况下使用它,因为它听起来像是:“如何在不进行更改的情况下解决此问题。”