2016-12-28 4 views
1

Я строю сетевой стек с использованием 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

Как сохранить запятую?

Спасибо!

+0

Здесь 'Coma (,)' кодируется% 2C –

+0

точно ... но здесь я нужен URL, как: HTTP: //api.openweathermap.org/data/2.5/weather?q=Rome,It&APPID=MY_API_KEY. Как и раньше, этот URL-адрес работает в браузере. – DungeonDev

ответ

1

Я нашел решение ... Api Key - это просто параметр для отправки запроса. Таким образом, код, чтобы изменить не в маршрутизаторе, но в функции запроса:

Alamofire.request(OWARouter.byCityName(parameters: ["q":"Rome","APPID":"MY_API_KEY"])).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)") 
      } 
     } 

EDIT: вопрос запятая не дает мне какие-либо проблемы в настоящее время. Спасибо.

0

импорт UIKit импорт Alamofire класс APIWRAPPER: NSObject {

static let instance = APIWRAPPER() 

func LoginAPI(Uname : String , Password : String) { 

let requestString = 
"http://************php/v1/sign-in" 
let params = ["user_name": Uname, 
       "password": Password] 

Alamofire.request(requestString,method: .post, parameters: params, encoding: JSONEncoding.prettyPrinted, headers: [:]).responseJSON { (response:DataResponse<Any>) in 

switch(response.result) { 
case .success(_): 
if response.result.value != nil 

{ 
print("response : \(response.result.value!)") 
} 
else 
{ 
print("Error") 
} 
break 
case .failure(_): 
print("Failure : \(response.result.error!)") 
break 
} 
} 
} 
} 
Смежные вопросы