Skip to content

API 요구사항

dahun-lee-daji edited this page May 10, 2021 · 23 revisions

백엔드에게 필요한 API 를 요청하기 위해, 요구사항을 정리하는 문서

자신이 어떤 HTTP 요청으로, 어떤 응답을 받고 싶은지 적어주시면 그대로 만들어 드립니다!

조회(GET), 추가(POST), 수정(PUT), 삭제(DELETE)

API 설명 링크

http://baseball.pyro-squad.com/

GET

GET /match

참가할 수 있는 게임 목록 조회

Response

[
    {
       "home" : "Captain",
       "away" : "Marble",
       "id" : "U924AX"
    },
    {
       "home" : "Honux",
       "away" : "Crong",
       "id" : "H132UY"
    },
    {
       "home" : "Android",
       "away" : "Apple",
       "id" : "M887UW"
    }
]
class Match {
 var home: String //홈 팀
 var away: String //원정 팀
 var id: String // 이 때 Id는 유일해야 한다.
}

GET /progress/{id}

response body

{
 "scores" : {
          "awayName": "Pyro"
          "awayScore": 3
          "homeName": "Robin"
          "homeScore": 7
        },
 "strike" : 2,
 "ball": 3,
 "outCount": 1,
 "bases": [true, true, false], // 1 2 3 루 주자 유무
 "inningInfo": {
                "inningCount" : 3
                "isUserTop" : true
                "isUserOffense" : false
               },
 "pitcher": {
            "name" : "김광현",
            "numberOfPitching" : "6",
            "hit" : "1",
            "baseOnBalls" : "0",
            "innings" : "2.3",
            },
 "batter": {
            "name" : "류현진",
            "plateAppearances" : "2",
            "hit" : "1",
            "out" : "1",
            "average" : "0.500",
            },
 "pitcherInfo": [true,false,false,true,false]
}

데이터 형식

class MatchInfo {
 var scores: ScoreInfo
 var strike: Int
 var ball: Int
 var outCount: Int
 var bases: [Bool] // 1 2 3 루 주자 유무
 var inningInfo: InningInfo
 var pitcher: Pitcher
 var batter: Batter
 var pitcherInfo: [Bool] // [false, false, true] = ["ball","ball","strike"] 
}

struct InningInfo {
 let inningCount : int
 let isUserTop : Bool
 let isUserOffense: Bool
}

GET /gameInfo/{id}

Response

    {
       "scores" : {
          "awayName": "Pyro"
          "awayScore": 3
          "homeName": "Robin"
          "homeScore": 7
        },
       "innings" : {
          "away": [1,1,1]
          "home": [1,1]
        },
       "awayPlayers" : {
        "pitchers" : [{
            "name" : "김광현",
            "numberOfPitching" : "6",
            "hit" : "1",
            "baseOnBalls" : "0",
            "innings" : "2.6",
            }, ... ],
        "batters" : [{
            "name" : "류현진",
            "plateAppearances" : "2",
            "hit" : "1",
            "out" : "1",
            "average" : "0.500",
            }, ...]
        },
       "homePlayers" : {
        "pitchers" : [{
            "name" : "김광현",
            "numberOfPitching" : "6",
            "hit" : "1",
            "baseOnBalls" : "0",
            "innings" : "3.0",
            }, ... ],        
        "batters" : [{
            "name" : "류현진",
            "plateAppearances" : "2",
            "hit" : "1",
            "out" : "1",
            "average" : "0.500",
            }, ...]
        }
    }

데이터 형식

class GameInfo {
 var scores: ScoreInfo
 var innings: Innings
 var awayPlayers: Players
 var homePlayers: Players
}

class Players {
 var pitchers : [Pitcher]
 var batters : [Batters]
}

class Batter {
 var name: String
 var plateAppearances: Int // 타석
 var hit: Int // 안타
 var out: Int // 아웃
 var average: float // 평균
}

class Pitcher {
 var name: String
 var numberOfPitching :Int
 var hit : Int //피안타
 var baseOnBalls : Int // 볼넷
 var innings : Float //공을 던진 이닝 수
}

class ScoreInfo  {
 var awayName: String
 var awayScore: Int
 var homeName: String
 var homeScore: Int
}

class Innings {
 var home: [Int]
 var away: [Int]
}

POST

POST /match

게임 입장 요청

Body

{ Id: "GJ873D", // 예시 Match의 Id
  selectedTeam: "Captain"  //모든 팀의 이름은 유니크하다.
}

response

200 : 참여 가능 400 : 타 플레이어가 선점함.

요청 사항 정리 부탁드립니다.

게임 시작 : home 선택 시 수비부터.

POST /progress/{id}

서버에서 Strike, Ball, 안타 3가지 중에 하나가 랜덤으로 발생할 수 있도록 해야한다.

request body

class ProgressResult {
    result: "strike" | "ball" | "hit" | "random";
}

response body

class MatchInfo {
 var scores: ScoreInfo
 var strike: Int
 var ball: Int
 var outCount: Int
 var bases: [Bool] // 1 2 3 루 주자 유무
 var inningInfo: String // "2회초 수비"
 var pitcher: Player
 var batter: Player
 var pitcherInfo: [String] // ["ball","ball","strike"]
}