(Deprecated) REST API v1
FOSSLight Hub의 기능을 REST API로 호출할 수 있습니다.
REST API V1은 25년 3월까지 지원됩니다. 4월부터는 REST API v2를 이용해 주시기 바랍니다.
REST API V1은 25년 3월까지 지원됩니다. 4월부터는 REST API v2를 이용해 주시기 바랍니다.
시작하기
TOKEN 발행
REST API를 호출하기 위해서 TOKEN을 발행해야 합니다.
- Admin 계정으로 로그인합니다.
- System > User Management 탭에서 User별로 Token을 발행할 수 있습니다.
REST API 테스트 도구
REST API 종류
1. OSS & License 정보 조회
| API | 응답 형식 | 설명 |
|---|---|---|
| /api/v1/downloadlocation_search | JSON | Download Location으로 OSS 정보를 조회합니다. |
| /api/v1/license_search | JSON | License Name으로 License 정보를 조회합니다. |
| /api/v1/oss_search | JSON | OSS Name, Version으로 OSS 정보를 조회합니다. |
2. 3rd Party 정보 조회
| API | 응답 형식 | 설명 |
|---|---|---|
| /api/v1/partner_search | JSON | 보기 권한이 있는 3rd Party에 대하여 하기 정보를 조회합니다. |
| /api/v1/partner_watcher_add | - | 3rd Party의 Watcher를 추가합니다. |
3. Project 정보 조회, 생성, FOSSLight Report 등록, Packaging 파일 업로드, BOM Export, Project 비교
| API | 응답 형식 | 설명 |
|---|---|---|
| /api/v1/create_project | JSON | Project를 생성하고, 생성된 Project ID를 return 받습니다. |
| /api/v1/model_search | JOSN | Project에 대하여 Model List를 조회합니다. (최대 Return Item 수 : 1000) - Project ID, Category, Model, Name, Release Date |
| /api/v1/model_update | JSON | Model 정보 문자열 목록을 통해 Project의 Model 정보를 업데이트합니다. - Model 정보 문자열 목록 (format . MODEL_NAME|Category|Release Date) - ex) MODEL_NAME|ETC > Etc|20220428 |
| /api/v1/model_update_upload_file | JSON | Model List 엑셀 파일을 통해 Project의 Model 정보를 업데이트합니다. - Model List의 엑셀 파일 : Project > Basic Information 탭 > Download 버튼 클릭 |
| /api/v1/oss_report_bin | - | BIN 탭에 FOSSLight Report를 업로드합니다.이미 OSS Table이 작성된 경우, Reset한 후 업로드하는 FOSSLight Report를 반영합니다. (반영 Sheet Name: "BIN") |
| /api/v1/oss_report_src | - | SRC 탭에 FOSSLight Report를 업로드합니다.이미 OSS Table이 작성된 경우, Reset한 후 업로드하는 FOSSLight Report를 반영합니다. (반영 Sheet Name : "SRC") |
| /api/v1/package_upload | - | Packaging 탭에 Packaging 파일을 업로드합니다. 이미 Packaging 파일이 업로드되어 있는 경우, 추가로 Packaging 파일을 업로드합니다. Packaging 파일 업로드 결과가 Mail로 발송됩니다. |
| /api/v1/prj_bom_compare | JSON | 두 개의 Project의 BOM의 OSS Name, OSS Version, License를 비교합니다. |
| /api/v1/prj_bom_export | File | Project의 BOM에서 Export한 결과 파일을 다운로드 받습니다. |
| /api/v1/prj_bom_export_json | JSON | Project의 BOM에서 Export한 결과를 json 포맷으로 return합니다. |
| /api/v1/prj_search | JSON | 보기 권한이 있는 Project에 대하여 하기 정보를 조회합니다. |
| /api/v1/prj_watcher_add | - | Project의 Watcher를 추가합니다. |
4. Vulnerability 정보 조회
| API | 응답 형식 | 설명 |
|---|---|---|
| /api/v1/vulnerability_data | JSON | OSS Name, Version별 CVE ID, CVSS Score, NVD Link를 조회합니다. |
| /api/v1/vulnerability_max_data | JSON | OSS Name, Version별 max score와 CVE ID를 확인할 링크를 조회합니다. |
5. Self-Check 생성, FOSSLight Report 등록
| API | 응답 형식 | 설명 |
|---|---|---|
| /api/v1/create_selfcheck | JSON | Self-Check Project를 생성하고, 생성된 Self-Check ID를 return 받습니다. |
| /api/v1/oss_report_selfcheck | - | Self-Check에 FOSSLight Report를 업로드합니다. 이미 OSS Table이 작성된 경우, Reset한 후 업로드하는 FOSSLight Report를 반영합니다.(반영 Sheet Name : "Self-Check") |
| /api/v1/export_selfcheck | File | Self-Check에서 Export한 결과 파일을 다운로드 받습니다. |
| /api/v1/selfcheck_watcher_add | - | Self-Check의 Watcher를 추가합니다. |
6. API 활용시, Code 값 확인
| API | 응답 형식 | 설명 |
|---|---|---|
| /api/v1/code_search | JSON | Project, 3rd Party 조회, Project 생성시 사용할 하기 Parameter의 값 List를 조회합니다. |
7. Error code
| Return Code | Description | Error Message |
|---|---|---|
| 200 | TOKEN이 존재하지 않습니다. | User does not exist. |
| 210 | 사용자의 TOKEN이 정상적이지 않습니다. | There is an error in the TOKEN value. |
| 310 | Parameter가 잘못되었습니다. | The parameter is invalid. |
| 320 | Project, self-check의 create건수가 초과되었습니다.(API를 활용한 생성은 일일 최대 3건) | The number of projects and self-checks that can be created has been exceeded. (Up to 3 per day) |
| 330 | OSS Report등 파일을 등록할 경우 작성된 data에 대하여 validation check시 오류가 발생하였습니다. | There is an error in the data written in the file. |
| 400 | 업로드할 파일(ex-OSS Report, NOTICE, result.txt, Packaging 파일)을 누락하여 호출을 한 경우 | The file to upload is missing. |
| 410 | OSS Report, Packaging file의 size가 초과된 경우입니다.(최대 Size: OSS Report -5MB, Packaging file- 4GB) | File size exceeded. (Max size: 5MB for oss report, 4GB for packaging file) |
| 420 | 등록한 file들이 지원하지 않은 확장자입니다. | The registered files are extensions that are not supported. |
| 430 | 업로드할 Tab이 활성화되지 않았습니다.Distribution Type 및 업로드할 Tab을 확인하세요. | The tab you are trying to upload is not active. |
| 440 | Load 할 Sheet 명이 없는 경우 | The [Sheet_name] sheet name cannot be found |
| 440 | 업로드한 파일에 load할 row가 없는 경우 | There is no data to load. |
| 500 | 호출된 대상에 권한이 없습니다. (ex : public 이 아닌 Project를 Watcher 또는 Creator가 아닌 user가 조회할 경우) | You do not have permission. |
| 999 | 알수 없는 Error. | Unknown error. |
REST API 활용 Sample
prj_search 를 이용하여 user과 admin 계정의 Project 정보를 조회하는 예제
# SPDX-FileCopyrightText: Copyright 2023 LG Electronics Inc.
# SPDX-License-Identifier: Apache-2.0
import csv
import requests
from datetime import datetime
from collections import OrderedDict
header_list = ['prjId', 'prjName', 'prjVersion', 'createDate', 'updateDate', 'identificationStatus', 'verificationStatus', 'distributionStatus', 'status', 'vulnerabilityScore', 'distributionType', 'notice', 'networkService', 'priority', 'noticePlatform']
def get_data(period, user):
url = "https://demo.fosslight.org/api/v1/prj_search"
querystring = {"createDate":period,"creator":user}
payload = ""
headers = {"_token": "abCDe...."}
response = requests.request("GET", url, data=payload, headers=headers, params=querystring, verify=False)
# print(response.text)
data = response.json()['data']
content_list = data['content']
data_list = []
for content in content_list:
data = OrderedDict()
for header in header_list:
if header in content.keys():
data[header] = content[header]
else:
data[header] = ''
data_list.append(data)
return data_list
if __name__ == "__main__":
current_year = datetime.now().year
content_list = []
content_list.extend(get_data('20220101-{0}1231'.format(current_year), "user"))
content_list.extend(get_data('20220101-{0}1231'.format(current_year), "admin"))
content_list.sort(key=lambda x:x['prjId'],reverse=True)
with open('api_data.csv','w',encoding='utf-8',newline='') as f:
wr = csv.writer(f)
wr.writerow(header_list)
for content in content_list:
wr.writerow(list(content.values()))