Предисловие: Вы упускаете слишком много важной информации из вопроса, чтобы на него можно было правильно ответить. Ваш код Swift выглядит, и, пожалуйста, не обижайтесь, немного новичок-i sh или как будто он был перенесен с Objective- C без особого опыта.
Я не знаю, почему POSTMAN не работает, но я вижу некоторые красные флажки в коде Swift, которые вы, возможно, захотите изучить, чтобы выяснить, почему ваше приложение iOS не работает.
Сначала я заметил, что eventUrl
кажется String
свойство типа, содержащего функцию deleteEvent
. Вы изменяете его, добавляя событие id
, создавая из него URL (как ни странно, см. Ниже), а затем снова изменяете его. Хотя это само по себе не обязательно неправильно, это может открыть двери для гоночных условий в зависимости от того, как ваше приложение работает в целом.
Что еще более важно: ваш eventUrl
оканчивается на «/»? Я предполагаю, что ваша конечная точка DELETE имеет форму https://somedomain.com/some/path/<id>
, верно? Теперь, если eventUrl
просто содержит https://somedomain.com/some/path
, ваш код создает https://somedomain.com/some/path<id>
. Последний da sh отсутствует, что определенно сбивает ваш бэкэнд (как я не могу сказать, поскольку это зависит от того, как путь разрешен в вашем серверном приложении).
Трудно сказать, что еще происходит из из приложения iOS, но, кроме этой потенциальной ловушки, я бы действительно рекомендовал использовать правильные типы Swift, где это возможно. Вот очищенная версия вашего метода, надеюсь, это немного поможет вам при отладке:
func deleteEvent(id: Int) {
guard let baseUrl = URL(string: eventUrl), let token = token else {
// add more error handling code here and/or put a breakpoint here to inspect
print("Could not create proper eventUrl or token is nil!")
return
}
let deletionUrl = baseUrl.appendingPathComponent("\(id)")
print("Deletion URL with appended id: \(deletionUrl.absoluteString)")
var request = URLRequest(url: deletionUrl)
request.httpMethod = "DELETE"
print(token) // ensure this is correct
request.allHTTPHeaderFields = ["Authorization": "Token \(token)"]
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Encountered network error: \(error)")
return
}
if let httpResponse = response as? HTTPURLResponse {
// this is basically also debugging code
print("Endpoint responded with status: \(httpResponse.statusCode)")
print(" with headers:\n\(httpResponse.allHeaderFields)")
}
// Debug output of the data:
if let data = data {
let payloadAsSimpleString = String(data: data, encoding: .utf8) ?? "(can't parse payload)"
print("Response contains payload\n\(payloadAsSimpleString)")
}
}
task.resume()
}
Очевидно, что это все еще ограничено с точки зрения обработки ошибок, et c., Но немного более быстрым и быстрым. содержит дополнительный вывод консоли, который, надеюсь, будет вам полезен. Последняя важная вещь: вы должны убедиться, что iOS не просто блокирует ваш запрос из-за Apple Transport Security : убедитесь, что ваш список содержит ожидаемые записи, если это необходимо (см. Также здесь для быстрого вступления).