我正在使用Alamofire 4和Swift 3构建网络堆栈。遵循Alamofire指南,我为服务的端点创建了一个路由器。我目前使用OpenWeatherMap的免费API,但我发现问题才能创建获取请求。 这就是所需的网址:http://api.openweathermap.org/data/2.5/weather?q=Rome&APPID=MY_API_KEY。在浏览器上粘贴,并使用一个真正的API密钥它的作品,并让我回到我的好json的信息有关天气在给定的位置。 在我的应用程序,我可以插入参数作为词典,但我无法找到一种方法来追加在URL的末尾的api键。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 为什么API密钥是在中间?
如果您需要这是一个简单的请求代码:
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)")
}
}
另一个问题...... 如果我作为参数使用[“Q”:“罗马,IT”],我的输出网址为:http://api.openweathermap.org/data/2.5/weather?q=Rome%2CIT
如何保留逗号?
谢谢!
这里'昏迷(,)'进行编码%2C –
没错......但在这里,我需要一个像网址:HTTP: //api.openweathermap.org/data/2.5/weather?q=Rome,It&APPID=MY_API_KEY。 与以前一样,此网址适用于浏览器。 – DungeonDev