Где фактический вызов API в этом исходном коде RxAlamofire? - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь выяснить, откуда поступают данные в вызове API. В частности, я хочу знать, откуда приходит req.user, исходя из того, что я могу сказать, что в вызов API не передаются параметры.

Вот код на стороне сервера (в JS):

let APIHandler = (req, res) = > {
    if (req.user) {
       latitude = req.user.location.latitude
       longitude = req.user.location.longitude
    }
}

А вот код на стороне клиента (в Swift):

 let strURLTo = SERVICE.BASE_URL + apiName + limit
 let headers = AuthorizationHeader.getAuthHeader(staticToken: false)

 var urlComponents = URLComponents(string: strURLTo)
 urlComponents?.queryItems = [URLQueryItem(name: "offset", value: String(offset)),
                             URLQueryItem(name: "limit", value: String(limit))]

 let strURL  = urlComponents?.url

 RxAlamofire.requestJSON(.get,strURL!,parameters:[:],headers:headers) 

            .debug()

            .subscribe(onNext: {(HeaderResponse, bodyResponse) in

                if let dict = bodyResponse as? [String: AnyObject] {
                    if let respDict: [String: Any] = JSON(dict).dictionaryObject {
                        let response = ResponseModel.init(statusCode: HeaderResponse.statusCode, response:respDict)
                        self.subject_response.onNext(response)
                    }
                }

            }, onError: { (error) in
                self.subject_response.onError(error)
            })

            .disposed(by: disposeBag)

И, наконец, вот определение RxAlamofire.requestJson:

public func requestJSON(_ method: Alamofire.HTTPMethod,
    _ url: URLConvertible,
    parameters: [String: Any]? = nil,
    encoding: ParameterEncoding = URLEncoding.default,
    headers: [String: String]? = nil)
    -> Observable<(HTTPURLResponse, Any)>
{
    return SessionManager.default.rx.responseJSON(
        method,
        url,
        parameters: parameters,
        encoding: encoding,
        headers: headers
    )
}

То, что я пробовал, было отслеживание черезRxAlamofire.requestJSON функция пошаговая, но я нигде не вижу, где происходит фактический вызов API (мне кажется, что он просто выделяет типы, которые он ожидает / возвращает). Кроме того, в вызове RxAlamofire.requestJSON(.get,strURL!,parameters:[:],headers:headers) нет параметров.

1 Ответ

0 голосов
/ 09 октября 2019

В этой строке выполняется фактический вызов (который для ясности распределен по нескольким строкам):

return SessionManager.default.rx.responseJSON(
    method,
    url,
    parameters: parameters,
    encoding: encoding,
    headers: headers
    )

Здесь устанавливаются параметры:

var urlComponents = URLComponents(string: strURLTo)
urlComponents?.queryItems = [URLQueryItem(name: "offset", value: String(offset)),
                             URLQueryItem(name: "limit", value: String(limit))]

Однако я также не вижу установленного user, поэтому, возможно, это происходит в функции API в верхней части этого ответа?

...