- DAG개념이 포함된 json데이터의 REST API개발 및 csv 데이터처리
❯ tree -N -L 2 -I "venv|.github|__pycache__" ─╯
.
├── README.md
├── app.py
├── data
│ ├── a.csv
│ └── b.csv
├── database
│ ├── db.py
│ └── model.py
├── requirements.txt
├── resources
│ ├── errors.py
│ ├── routes.py
│ └── views.py
├── test.py
└── utils
└── executors.py
4 directories, 12 files
- Notion과 Git branch를 연동하여 작업 진행 (Notion 링크)
Tag: 1.0.0
: Client는 Job 정보를 Server에게 전송Tag: 1.1.0
: Server는 받은 정보를 job.json(mongodb)에 저장
Tag: 2.0.0
: Client는 특정 Job정보를 삭제하기 위해 job id를 서버로 전송Tag: 2.1.0
: Server는 받아온 job id에 해당하는 job 정보를 삭제
Tag: 3.0.0
: Client는 특정 Job정보를 수정하기 위해 job id를 서버로 전송Tag: 3.1.0
: Server는 받아온 job id에 해당하는 job 정보를 수정
Tag: 4.0.0
: Client는 특정 Job을 실행하기 위해 job id를 서버로 전송Tag: 4.1.0
: Server는 받아온 job id에 해당하는 job list를 얻음Tag: 4.1.1
: read task를 수행을 위해 특정 file에 접근Tag: 4.1.2
: file의 값을 얻어 pandas의 DataFrame으로 전달
Tag: 4.2.0
: 특정 column_name을 제외하여 DataFrame으로 전달Tag: 4.3.0
: 전달받은 데이터를 새로운 file로 저장 및 Client에게 전달
-
GET
/api/v1/jobs/1/run
-
요청 Body
None
-
server 응답
"job_id=1 run task Success"
-
결과
- task_list의 작업(예를들면 read -> drop -> write)이 진행된다.
- a.csv파일 수정의 결과값인 b.csv파일이 생성된다.
-
존재하지 않는 id값으로 요청에 대한 server 응답
{ "message": "Job with given id doesn't exists", "status": 400 }
-
-
POST
/api/v1/jobs
-
요청 Body
{ "job_id" : 1, "job_name" : "Job1", "task_list" : { "read" : ["drop"], "drop" : ["write"], "write" : [] }, "property" : { "read": { "task_name": "read", "filename" : "data/a.csv", "sep" :"," }, "drop" : { "task_name": "drop", "column_name": "date" }, "write" : { "task_name": "write", "filename" : "data/b.csv", "sep": "," } } }
-
server 응답
"job_id=1 created OK"
-
-
GET
/api/v1/jobs
-
요청 Body
None
-
Server 응답
[ { "_id": { "$oid": "6283915c6e955720caac4535" }, "job_id": 1, "job_name": "Job1", "task_list": { "read": [ "drop" ], "drop": [ "write" ], "write": [] }, "property": { "read": { "task_name": "read", "filename": "data/a.csv", "sep": "," }, "drop": { "task_name": "drop", "column_name": "date" }, "write": { "task_name": "write", "filename": "data/b.csv", "sep": "," } } }, , (중간생략) , ]
-
-
DELETE
/api/v1/jobs/1
-
요청 Body
None
-
Server 응답
"job_id=1 deleted OK"
-
삭제 후 재요청에 대한 Server 응답
{ "message": "Deleting Job added by other is forbidden", "status": 403 }
-
-
PUT
/api/v1/jobs/1
-
요청 Body
{ "job_name" : "Job1", "task_list" : { "read" : ["drop"], "drop" : ["write"], "write" : [] }, "property" : { "read": { "task_name": "read", "filename" : "data/a.csv", "sep" :"," }, "drop" : { "task_name": "drop", "column_name": "date" }, "write" : { "task_name": "write", "filename" : "data/b.csv", "sep": "," } } }
-
Server 응답
"job_id=1 Updated OK"
-
존재하지 않는 Job에 대한 put 요청 시 Server 응답
{ "message": "Updating Job added by other is forbidden", "status": 403 }
-
-
GET
/api/v1/jobs/1
-
요청 Body
None
-
Server 응답
[ { "_id": { "$oid": "62844f8bbade6a84942682b9" }, "job_id": 1, "job_name": "Job1", "task_list": { "read": [ "drop" ], "drop": [ "write" ], "write": [] }, "property": { "read": { "task_name": "read", "filename": "data/a.csv", "sep": "," }, "drop": { "task_name": "drop", "column_name": "date" }, "write": { "task_name": "write", "filename": "data/b.csv", "sep": "," } } } ]
-
MAC OS 기준으로 설명되었습니다.
Python=3.8 이상, 그리고 MongoDB가 로컬에 설치되어 있다고 가정하고 작성하였습니다.
% git clone https://github.com/2nd-wanted-pre-onboarding-team-A/MoaData-Wanted-A.git
% cd MoaData-Wanted-A
% python -m venv venv
% source venv/bin/activate
% pip install --upgrade pip
% pip install -r requirements.txt
% flask run
% python -m unittest test.py
% curl http://127.0.0.1:5000/api/v1/jobs