Ich baue einen Netzwerkstack mit Alamofire 4 und Swift 3. Nach den Alamofire Richtlinien habe ich einen Router für die Endpunkte der Dienste erstellt. Ich verwende derzeit die freie API von OpenWeatherMap, aber ich finde Probleme, um eine Anfrage zu erstellen. Das ist die URL benötigt: http://api.openweathermap.org/data/2.5/weather?q=Rome&APPID=MY_API_KEY. In einem Browser eingefügt, und mit einem echten API-Schlüssel funktioniert es und gibt mir meinen schönen JSON mit Informationen über das Wetter an dem angegebenen Ort zurück. In meiner App kann ich die Parameter als Dictionary einfügen, aber ich finde keine Möglichkeit, den API-Schlüssel am Ende der URL anzuhängen.Alamofire 4 Swift 3 GET Anfrage mit Parametern
Das ist mein Enum-Router:
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
}
}
Als ich meine (URLRequest.url) log! Ich habe das: http://api.openweathermap.org/data/2.5/weather?q=Rome, aber ich kann keinen Weg finden, den apiKey hinzuzufügen. Was mache ich falsch?
Ich habe auch eine hässliche Test Hinzufügen diesen Code nach dem Druck gemacht:
var urlRequest2 = URLRequest(url: (urlRequest.url)!.appendingPathComponent(OWARouter.pathApiKey))
print("URL2: \(urlRequest2)")
und das Protokoll ist URL2: http://api.openweathermap.org/data/2.5/weather/&APPID=My_API_KEY?q=Rome Wie kommt der api-Schlüssel in der Mitte?
Wenn Sie dies ist die einfache Anforderungscode:
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)")
}
}
Eine andere Frage ... Wenn ich als Parameter verwenden [ "q": "Rom, IT"], meine Ausgabe url ist: http://api.openweathermap.org/data/2.5/weather?q=Rome%2CIT
Wie das Komma behalten?
Vielen Dank!
Hier 'Coma (,)' mit% 2C –
Genau codiert ... aber hier würde ich eine URL benötigen wie: http: //api.openweathermap.org/data/2.5/weather?q=Rome,It&APPID=MY_API_KEY. Wie zuvor funktioniert diese URL im Browser. – DungeonDev