ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Vapor] Rest API 만들기 - 1
    Programing/Vapor 2020. 5. 22. 03:06

    안녕하세요 5anniversary 입니다~!

     

    이전 시간의 포스팅에 이어서, 이번에는 Vapor를 통해 데이터베이스에 접근해 데이터들을 생성, 수정, 삭제해보는 시간을 가져보겠습니다~!

     

    projectName/
    ├── Package.swift
    ├── Sources/
    │   ├── App/
    │   │   ├── Controllers/
    │   │   │   └── UserController.swift
    │   │   ├── Utility/
    │   │   │   └── ResponseJSON.swift
    │   │   ├── Model/
    │   │   │   └── User.swift
    │   │   └── System/
    │   │       ├── app.swift
    │   │       ├── boot.swift
    │   │       ├── boot.swift
    │   │       └── routes.swift
    │   └── Run/
    │       └── main.swift
    ├── Tests/
    ├── Resources/
    ├── Public/
    ├── Dependencies/
    └── Products/
    

    우선 제가 사용하는 프로젝트 구조입니다.

     

    이렇게 파일을 하나씩 생성해주세요.

     

    오늘은 Response 값을 적당히 가공해 보내주기 위한 ResponseJSON파일에 대한 설명을 해드리겠습니다.

     

    {
     "status":200,
     "message":"요청이 성공했습니다.",
     "data":[{
        "id":1,
        "name":"5anniversary"
        }]
    }

    오늘 ResponseJSON파일을 만드는 이유는 위와 같이 JSON 형식으로 response값을 보내줄 때

     

    status값과 message를 정해놓고 원하는 경우에 편하게 사용하기 위해 만드는 의도임을 알아주셨으면 합니다!

     

    enum ResponseStatus:Int,Content {
        case ok = 200
        case error = 400
        case unknown = 500
        
        var desc : String {
            switch self {
            case .ok:
                return "요청이 성공했습니다."
            case .error:
                return "요청이 실패했습니다."
            case .unknown:
                return "에러의 원인을 모릅니다. (서버 에러)"
            }
        }
    
    }
    

    먼저 ResponseStatus로 원하는 상태 코드를 작성해주시면 됩니다.

     

    위 코드는 간단하게 200, 400, 500에 해당하는 상태 코드만 작성한 뼈대 코드입니다.

     

    상태 코드는 정해진 규칙이 있기 때문에 HTTP 상태코드 이 문서를 보고 적절한 상태 코드를 작성해주시면 됩니다.

     

     

    다음으로

    import Vapor
    
    struct ResponseJSON<T: Content>: Content{
        
        private var status: ResponseStatus
        private var message: String
        private var data: T?
        
        init(data: T) {
            self.status = .ok
            self.message = status.desc
            self.data = data
        }
        
        init(status:ResponseStatus = .ok) {
            self.status = status
            self.message = status.desc
            self.data = nil
        }
        
        
        init(status:ResponseStatus = .ok,
             message: String = ResponseStatus.ok.desc) {
            self.status = status
            self.message = message
            self.data = nil
        }
        
        init(status:ResponseStatus = .ok,
             message: String = ResponseStatus.ok.desc,
             data: T?) {
            self.status = status
            self.message = message
            self.data = data
        }
    }
    

    ResponseJSON을 작성해주세요.

     

    ok 일경 우와 아닌 경우, 그리고 data가 있는 경우와 아닌 경우 맞춰서 작성이 되어있습니다.

     

    그리고 굳이 data를 반환해줄 필요가 없는 경우가 있기 때문에 

    struct Empty: Content {}
    

    해당하는 경우에 맞춰 위와 같이 Empty 구조체를 작성해주세요.

     

    이번 시간에는 프로젝트의 구조를 알아보고, 클라이언트 측에서 처리하기 간편하게 하기 위한 ResponseJSON.swift를 작성해보았고 다음 시간에는 이 것을 활용해보는 시간이 될 거예요~~

    댓글

Designed by Tistory.