ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] Firebase로 REST API 공부하기(+ Postman, Alamofire) - 2. POST
    공부기록/iOS 2021. 9. 1. 01:05

    출처 - https://cloud.google.com/firestore/docs/reference/rest/v1/projects.databases.documents/createDocument

    문서를 찾아보니 Document를 만들때 POST를 사용한다.

    GET과 다른점은 Query parameter로 documentId를 받고 이게 생성될 Document의 이름이 된다.

    그럼 기본 URL https://firestore.googleapis.com/v1에

    Path Parameter인 projects/fir-restapi-8d2ba/databases/(default)/documents/UserCollection을 붙이고

    Query Parameter로 ?documentId=새로운 DocumentId를 붙이면 된다.

     

     

    먼저 documentId를 NewUserByPostman로 해서 포스트맨으로 생성해봤다.

    이 때 Body는 "fields"만 보내면 된다!

    Response를 보면 name과 createTime, updateTime은 알아서 만들어진다.

     

     

    Database를 보면 NewUserByPostman이라는 문서가 생겼고 필드도 포스트맨에서 작성한대로 만들어졌다.

     

     

    xcode에서는 createDocumentData라는 함수를 만들어서 생성했다.

     

    var urlComponent = URLComponents(string: dataURL)
       let documentID = URLQueryItem(name: "documentId", value: documentID)
       urlComponent?.queryItems = [documentID]
            
       guard let postURL = urlComponent?.url else {
            print("postURL fail")
            return
        }

     

    여기는 Query Parameter인 documentId를 추가해주는 부분이다.

    만들어둔 dataURL을 URLComponents로 만들고 URLQueryItem을 만들어 추가해준다.

    그런 다음 urlComonent의 url을 이용한다. Optional이므로 옵셔널 바인딩을 해준다.

     

    let parameter = APIResponse(
        fields: Fields(
            name: Name(
                stringValue: name),
            email: Email(
                stringValue: email),
            nickname: Nickname(
                stringValue: nickname)
        )
    )

     

    함수의 파리미터로 받은 name, email, nickname을 이용해서 APIResponse 인스턴스를 만든다.

    Alamofire에서 이거를 그대로 이용한다. 이 부분을 몰라서 해멨었다.

     

    AF.request(postURL, method: .post, parameters: parameter, encoder: JSONParameterEncoder.default).responseJSON { response in
        print("\n\n\n Getting Document Data... \n\n\n")
        	if let error = response.error {
                print(error)
            }
            else if let data = response.data {
                print(try! JSONSerialization.jsonObject(with: data, options: .allowFragments))
                guard let apiResponse = try? JSONDecoder().decode(APIResponse.self, from: data) else {
                    print("decode fail")
                    return
                }
                print(" name : \(apiResponse.fields.name.stringValue)")
                print(" nickname: \(apiResponse.fields.nickname.stringValue)")
                print(" email: \(apiResponse.fields.email.stringValue)")
                print("\n\n\n Finished")
            }
        }
    }

     

    parameter를 APIResponse 인스턴스 그대로 사용하고

    encoder를 JSONParameterEncoder.default를 사용하면 된다!!

     

     

    xcode에서는 documentId를 NewUserByXcode로 해서 문서를 생성했다.

     

    결과는 작성한대로 잘 생성됐다.

    POST에 대해서도 공부해봤다!

Designed by Tistory.