POST-запрос с использованием структур в Swift - PullRequest
0 голосов
/ 20 июня 2019

Я делаю 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 после отправки запроса на комментарий?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...