Python 3.6+
Postgres 10+
Docker을 이용하여 실행하기 위해 필요한것.
docker-compose 1.21+
docker 18+
cd docker-compose/
docker-compose up
http://localhost:5000 에 서버 시작되었음.
Virtualenv(venv)을 설정하여 로컬 실행환경 만들기
virtualenv -p python3 venv
:: venv 생성.
source venv/bin/activate
:: venv 활성화.
pip install -r requirements.txt
:: 의존성 모듈들 venv내에
설치.
py.test
:: 테스트 실행.
테스트 실행시 SQLite3 inmem DB 사용하여 별도의
데이터베이스 불필요.
DB :: 127.0.0.1:5432
에 Postgres 실행되고 있어야함.
사용자명/패스워드는 postgres
/ postgres
.
untertaxi_api
database생성 :: CREATE DATABASE untertaxi_api
데이터베이스 마이그레이션 실행.
./manage.py db upgrade
최초 한번 데이터베이스 초기화를 위해 필요하고, 이후에 서버
실행시는 불필요.
서버 실행.
./manage.py runserver
HTTP Basic Authentication 을 사용.
다만, password
을 서버의 SECRET_KEY
을 이용하여 SHA-256
해시하여 전송.
참고 예제 ::
https://github.com/ageldama/untertaxi-api-flask/blob/master/misc/new-user-and-ride-request.py#L30
이하 로그인이 필요한 API은 항상 별도로 표시하지않고,
로그인이 불필요한 경우에만 표기한다.
로그인 실패시 HTTP응답 코드로 401 UNAUTHORIZED 이며, 로그인
필요한 API에서 반복적으로 언급하지 않겠다.
**회원** 리소스는 MemberType
enum에 따라서 승객과 기사로 구분.
승객 :: PASSENGER
기사 :: DRIVER
요청
로그인 불필요.
JSON Request Body
{
"email" : "foo@bar.com" , // 문자열, 필수.
"password" : "mypass" , // 문자열, 필수. 평문 비밀번호.
"member_type" : "DRIVER"
}
응답
201
CREATED :: 성공. 응답본문없음.
400
BAD REQUEST :: 실패. 응답본문없음.
잘못된 이메일 양식.
혹은 이미 가입된 이메일 주소.
비밀번호가 4글자 이하.
잘못된 회원타입(MemberType).
회원 정보 GET /v1/member/<member_id>
다른 배차요청 목록 과 같은 API으로 얻은 member_id
에 맞는
회원정보를 조회할때 사용.
요청
요청 본문 없음.
<member_id>
path variable으로 정보를 얻고 싶은 회원 ID을
지정.
응답
200
OK :: 성공.
JSON으로 다음과 같은 응답.
{
"email" : "foo@bar.com" , // 회원 이메일.
"active" : true , // 삭제되지않은 회원인가.
"created_at" : "2018-05-18 12:33:12" , // 최초 생성일, 문자열.
"update_at" : "2018-05-18 12:33:12" , // 최종 수정일, 문자열.
}
400
BAD REQUEST :: 실패
로그인한 사용자의 계정으로 등록한 배차 목적지 주소 목록.
응답
200
OK :: 응답JSON본문
[
// 다음의 배열,
{
"id" : 12345 , // 주소지id
"member_id" : 987 , // 이 주소지를 등록한 회원id
"address" : "이젠 여기" , // 주소지 문자열
"created_at" : "..." , // 최초 등록일시
"updated_at" : "..." , // 최종 수정일시
"active" : true // 삭제여부
}
]
새로운 배차 목적지를 등록한다.
기존에 등록해놓은 목적지가 없을 경우에 사용.
요청
요청본문 JSON
{
"address" : "아까 거기" // 문자열, 100글자. 필수.
}
응답
200
OK :: 성공.
JSON응답
{
"id" : 1234 // 등록한 address의 id
}
400
BAD REQUEST :: 실패
응답본문없음.
요청의 address
필드가 없거나,
요청의 주소 문자열이 100글자 초과.
주소 정보 GET /v1/address/<address_id>
지정한 주소지 id의 정보를 얻는다.
내가 등록한 주소지가 아니어도, 배차요청등을 표시하기 위해
다른 사람의 주소지 정보도 얻을수있다.
요청
Path Variable으로 address_id
주소지 id 지정.
응답
200
OK :: 응답JSON본문
{
"id" : 12345 , // 주소지id
"member_id" : 987 , // 이 주소지를 등록한 회원id
"address" : "이젠 여기" , // 주소지 문자열
"created_at" : "..." , // 최초 등록일시
"updated_at" : "..." , // 최종 수정일시
"active" : true // 삭제여부
}
400
BAD REQUEST :: 실패
지정한 address_id
의 주소지가 등록되어 있지 않다.
주소 삭제 DELETE /v1/address/<address_id>
로그인한 회원이 등록한 배차요청 목적지 주소를 삭제한다.
요청
Path Variable으로 삭제할 address_id
을 지정.
응답
204
NO CONTENT :: 성공적으로 삭제. 응답본문없음.
400
BAD REQUEST :: 해당 address_id
의 주소 없음.
401
UNAUTHORIZED :: 지정한 주소지가 요청한 사람의 회원과
같지 않아 삭제를 거부.
AVAILABLE
:: 배차요청을 생성하였고, 배차가 가능한 상태.
ACCEPTED
:: 배차 받은 상태.
AVAILABLE
상태의 배차요청만 ACCEPTED
할수있다.
ARRIVED
:: 배차 받아 목적지에 도착.
ACCEPTED
상태의 배차요청만 ARRIVED
할수있다.
CANCELLED
:: 취소한 배차요청.
배차요청 생성 PUT /v1/ride_request
새로운 배차 요청을 생성한다.
요청을 보내는 로그인 사용자을 승객으로 하여 생성,
처음 생성시 status
은 자동적으로 AVAILABLE
으로 생성한다.
요청
{
"address_id" : 12345 // 배차요청할 목적지 주소id.
}
응답
200
OK :: 생성완료, 요청본문JSON
{
"id" : 383 // 생성한 배차요청id.
}
400
BAD REQUEST :: 실패, 지정한 address_id
을 찾을수없음.
배차요청 목록 GET /v1/ride_request
모든 사용자의 모든 상태인 전체 배차요청 목록.
응답
200
OK
[
// 다음과 같은 배차요청 항목들의 배열,
{
"id" : 123545 , // 배차요청id.
"passenger_id" : 123 , // 배차요청한 승객id.
"driver_id" : null , // 배차요청을 승인한 기사id. (승인대기중이면 null)
"address_id" : 1 , // 목적지 주소id.
"created_at" : "..." , // 최초 생성일시.
"updated_at" : "..." , // 최종 수정일시.
"status" : "AVAILABLE" // 배차요청의 상태.
} ,
...
]
배차요청 취소 DELETE /v1/ride_request/<ride_request_id>
로그인한 사용자의 배차요청을 취소한다.
요청
Path Variable ride_request_id
으로 취소하고 싶은
배차요청을 지정한다.
요청본문은 없다.
응답
204
NO CONTENT :: 처리완료.
400
BAD REQUEST :: 해당 배차요청없음.
401
UNAUTHORIZED :: 해당 배차요청은 다른 사용자의
배차요청.
배차요청 승인 POST /v1/ride_request/<ride_request_id>/accept
기사인 회원이 다른 회원이 생성한 배차요청을 승인한다.
자신이 생성한 배차요청은 승인할 수 없다.
MemberType
이 DRIVER
인 회원만 승인할 수 있다.
요청
Path Variable ride_request_id
으로 승인할 배차요청을 지정.
요청본문은 없다.
응답
204
NO CONTENT :: 승인완료.
400
BAD REQUEST :: 해당 배차요청이 없음.
401
UNAUTHORIZED :: API호출하는 사용자가 DRIVER
이
아니거나, 지정한 배차요청이 대기상태의(AVAILABLE
) 요청이 아님.
배차요청 도착 POST /v1/ride_request/<ride_request_id>/arrive
기사 자신이 승인했었던 배차요청을 목적지에 도착했을때, 완료로
처리.
요청
Path Variable ride_request_id
으로 도착처리할 배차요청을 지정.
요청본문은 없다.
응답
204
NO CONTENT :: 도착처리 완료.
400
BAD REQUEST
해당 배차요청이 없거나,
승인상태의 배차요청이 아님.
401
UNAUTHORIZED
API호출한 회원이 DRIVER
타입이 아님.
내가 승인하여 처리한 배차요청이 아님.