Я строю сетевой стек с использованием Alamofire 4 и Swift 3. Следуя рекомендациям Alamofire, я создал маршрутизатор для конечных точек служб. В настоящее время я использую бесплатный API OpenWeatherMap, но я нахожу проблемы, чтобы создать запрос на получение. Это нужный вам адрес: http://api.openweathermap.org/data/2.5/weather?q=Rome&APPID=MY_API_KEY. Вставляемый в браузере и использующий настоящий API-ключ, он работает и возвращает мне мой прекрасный json полный информации о погоде в данном месте. В моем приложении я могу вставить параметры в Словарь, но я не могу найти способ добавить ключ api в конце URL-адреса.Alamofire 4 Swift 3 Запрос GET с параметрами
Это мое перечисление маршрутизатор:
enum OWARouter: URLRequestConvertible {
case byCityName(parameters: Parameters)
// MARK: Url
static let baseURLString = "http://api.openweathermap.org"
static let apiKey = "MY_APY_KEY"
static let pathApiKey = "&APPID=\(apiKey)"
var method: HTTPMethod {
switch self {
case .byCityName:
return .get
}
}
var path: String {
switch self {
case .byCityName:
return "/data/2.5/weather"
}
}
// MARK: URLRequestConvertible
func asURLRequest() throws -> URLRequest {
let url = try OWARouter.baseURLString.asURL()
var urlRequest = URLRequest(url: url.appendingPathComponent(path))
switch self {
case .byCityName(let parameters):
urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters)
print((urlRequest.url)!)
}
urlRequest.httpMethod = method.rawValue
return urlRequest
}
}
Когда я протоколирует (URLRequest.url)! У меня есть это: http://api.openweathermap.org/data/2.5/weather?q=Rome, но я не могу найти способ добавить apiKey. Что я делаю неправильно?
Я также сделал некрасивый тест, добавив этот код после печати:
var urlRequest2 = URLRequest(url: (urlRequest.url)!.appendingPathComponent(OWARouter.pathApiKey))
print("URL2: \(urlRequest2)")
И журнал URL2: http://api.openweathermap.org/data/2.5/weather/&APPID=My_API_KEY?q=Rome Какого ключа апи находится в середине?
Если вам нужно это просто код запроса:
Alamofire.request(OWARouter.byCityName(parameters: ["q":"Rome"])).responseJSON { response in
print(response.request)
print(response.response)
print(response.data)
print(response.result)
debugPrint(response)
if let JSON = response.result.value {
print("json: \(JSON)")
}
}
Другой вопрос ... Если я использую в качестве параметров [ «д»: «Рим, IT»], мой выход Ссылка: http://api.openweathermap.org/data/2.5/weather?q=Rome%2CIT
Как сохранить запятую?
Спасибо!
Здесь 'Coma (,)' кодируется% 2C –
точно ... но здесь я нужен URL, как: HTTP: //api.openweathermap.org/data/2.5/weather?q=Rome,It&APPID=MY_API_KEY. Как и раньше, этот URL-адрес работает в браузере. – DungeonDev