#swift
#swift
Вопрос:
Я пытаюсь получить вызов API, и я знаю, что выполнение этого с помощью URL-компонентов — хороший метод. Тем не менее, я не совсем понимаю, как это работает. Вот мой вызов, который я хочу использовать: https://api.unsplash.com/search/photos?per_page=20;query=londonamp;client_id=cn-xTwbvpcPUcpOgwJ2WIehB8UB641vs6GasCGMurzI
Вот мой звонок:
func fetchNews() {
var urlComponents = URLComponents()
urlComponents.scheme = "https"
urlComponents.host = "api.unsplash.com"
urlComponents.path = "search/photos?per_page=20"
urlComponents.queryItems = [.init(name: "client_id", value: "cn-xTwbvpcPUcpOgwJ2WIehB8UB641vs6GasCGMurzI"),
.init(name:"", value: "London")]
if let url = urlComponents.url {
performRequest(url)
print(url)
}
}
Чего мне не хватает?
Комментарии:
1. Как ваш вызов не работает? Что такое
performRequest
?2. Почему вы хотите добавить элемент запроса, где его имя оставлено пустым?
3. Я не уверен
URLComponents
, что обрабатывает;
URL-адреса…
Ответ №1:
Вам нужно больше отлаживать самостоятельно и проверять, где происходит сбой.
Давайте начнем с :
func fetchNews() {
var urlComponents = URLComponents()
urlComponents.scheme = "https"
urlComponents.host = "api.unsplash.com"
urlComponents.path = "search/photos?per_page=20"
urlComponents.queryItems = [.init(name: "client_id", value: "cn-xTwbvpcPUcpOgwJ2WIehB8UB641vs6GasCGMurzI"),
.init(name:"", value: "London")]
if let url = urlComponents.url {
performRequest(url)
print(url)
} else {
print("No URL")
}
}
«Нет URL» печатается.
Давайте queryItems
вообще удалим, все еще «Нет URL».
Давайте исправим это, добавив /
перед путем.
И я получаю:
https://api.unsplash.com/search/photos?per_page=20
Что я вижу из вашего кода и что мне не нравится: per_page=20
это элемент запроса, и для «Лондона» нет ключа, а процент результата не ?
соответствует предыдущему per_page
. Так что удалите его, в конце концов, это единственный признак того, что впоследствии будет запрос.
Давайте изменим это на:
urlComponents.path = "/search/photos"
urlComponents.queryItems = [.init(name: "client_id", value: "cn-xTwbvpcPUcpOgwJ2WIehB8UB641vs6GasCGMurzI"),
.init(name:"query", value: "London"),
.init(name: "per_page", value: "20")]
Лучше, нет?
Вывод:
https://api.unsplash.com/search/photos?client_id=cn-xTwbvpcPUcpOgwJ2WIehB8UB641vs6GasCGMurzIamp;query=Londonamp;per_page=20
НО в вашем URL-адресе есть «;», и это странно, это неясно. Вы можете добавить «,» после 20
параметров, но order может импортировать для него, тогда как это не должно быть для запроса, поскольку это ключевой доступ.