Я делаю POST-запрос, используя структуру. Но почему-то ошибка происходит. Ответ API - «Файл / комментарии не найдены».
HTTP Body
{
rating: 10,
writer: "coder",
movie_id: "5a54c286e8a71d136fb5378e",
contents: "GOOD!!!"
}
Мне удалось создать и отправить HTTP-тело.
Но я не видел ответа API.
CommentRequest Struct
struct CommentRequest: Codable {
let comments: [Comment]
enum CodingKeys: String, CodingKey {
case comments
}
}
struct Comment: Codable {
let rating: Double //평점
let writer: String
let movieId: String
let contents: String
enum CodingKeys: String, CodingKey {
case rating
case writer
case movieId = "movie_id"
case contents
}
}
Структура ответа на комментарии
struct CommentResponse: Codable {
let rating: Double //평점
let timestamp: Double
let writer: String
let movieId: String
let contents: String
enum CodingKeys: String, CodingKey {
case rating
case timestamp
case writer
case movieId = "movie_id"
case contents
}
}
отправка запроса POST с использованием структур
func submitComment(comment: Comment, completion:((Error?) -> Void)?) {
// Specify this request as being a POST method
var request = URLRequest(url: MovieAPI.Endpoint.commnet.url)
request.httpMethod = "POST"
// Make sure that we include headers specifying that our request's HTTP body
// will be JSON encoded
var headers = request.allHTTPHeaderFields ?? [:]
headers["Content-Type"] = "application/json"
request.allHTTPHeaderFields = headers
// Now let's encode out Post struct into JSON data...
let encoder = JSONEncoder()
do {
let jsonData = try encoder.encode(comment)
// ... and set our request's HTTP body
request.httpBody = jsonData
print("jsonData: ", String(data: request.httpBody!, encoding: .utf8) ?? "no body data")
} catch {
completion?(error)
}
// Create and run a URLSession data task with our JSON encoded POST request
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let task = session.dataTask(with: request) { (data, response, error) in
guard error == nil else {
completion?(error!)
return
}
// APIs usually respond with the data you just sent in your POST request
if let data = data, let utf8Representation = String(data: data, encoding: .utf8) {
print("response: ", utf8Representation)
} else {
print("no readable data received in response")
}
}
task.resume()
}
@IBAction func save(_ sender: AnyObject) {
if let writer = writerTextField.text, let contents = contentsTextField.text, let rating = rateLabel.text, !writer.isEmpty && !contents.isEmpty {
let newComment = Comment(rating: Double(rating) ?? 0, writer: writer, movieId: movieCommentList?.movieId ?? "", contents: contents)
submitComment(comment: newComment) { (error) in
if let error = error {
fatalError(error.localizedDescription)
}
}
dismiss(animated: true, completion: nil)
} else {
let title = "Missing writer or contents"
let message = "Both writer and writer need to be present to be able to save your editing"
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
let cancelAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alertController.addAction(cancelAction)
present(alertController, animated: true, completion: nil)
}
}
Как использовать структуру CommentResponse для получения ответа API после отправки запроса на комментарий?