-
API 와 오픈 API프로젝트 2022. 11. 22. 15:22
새로운 프로젝트를 시작하는데, 다음 할 일은 api 명세서 작성이었다
국비 교육에서의 프로젝트 때는 모든 환경이 동일하게 설정되어 있어서 그랬는지
api, db 등등 모든 환경 설정에 대한 회의가 필요 없었다
api 명세서 작성합시다 > 무슨 말이지? 왜 api 명세가 필요하지 이렇게 되었다
그 과정에서 오픈 api와 또 헷갈리기 시작했고 이번을 기회로 정리하기로 했다.
API (Application Programming Interface)
응용프로그램에서 데이터를 주고받기 위한 방법
특정 사이트에서 특정 데이터를 공유할 경우 어떠한 방식으로 정보를 요청하고 받을 수 있는지에 대한 규격
> API 역할 :
1. API는 서버와 데이터베이스에 대한 출입구 역할
2. API는 애플리케이션과 기기가 원활하게 통신
3. API는 모든 접속을 표준화 (기계, 운영체제 등 상관없이 누구나 동일한 액세스)
> API 유형 :
1. private API
2. public API
3. partner API
Open API (Open Application Programming Interface)
누구나 사용할 수 있도록 공개된 API
> 개발할 때 들어가는 시간과 비용을 줄이고 더 양질 개발 가능
> 공개키를 발급 받고 사용 가능
RESTful API
REST : Representational State Transfer, 리소스 지향 아키텍처로 모든 것을 리소스, 명사로 표현
웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST 발표
REST API는 HTTP Method별로 역할을 명시한 게 특징, 자원(uri는 정보의 자원을 표현) + 행위(http method)
REST API 디자인 가이드 >
1. URI는 정보의 자원을 표현해야 한다
2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현
API 명세서 작성의 장점 :
1. API 호출하여 결과를 해석하기 위한 필수 정보만 간결하게 포함하고 있어 API 사용방법을 파악 용이
2. 시스템이 해석할 수 있는 형식으로 작성된 경우, API 명세서로부터 소스 코드를 생성 가능
3. 다양한 프로그래밍 언어로 API 제공하는 경우 라이브러리 및 문서를 통합 관리 가능
4. 별도의 코드 작성 없이 테스트 도구에 명세서를 올려서 API 동작 시험이 가능
URI : 서버 설계 도면 (서버 구성 요소)
API : 서버 사용 설명서
사용법 :
1. /는 계층 관계를 나타내는 데 사용
2. uri 마지막 문자로 슬래시 포함하지 않음
3. 밑줄(_) 사용하지 않음
4. uri 경로에는 소문자가 적합
5. 파일 확장자는 uri에 포함하지 않음
5. 자원을 표현하는데는 collection, document
API 단점
1. 보안성과 HTTP 방식의 제한
: API의 단일 진입점인 API 게이트웨이는 해커의 타깃 대상이 될 수 있다
평범한 HTTP 메서드를 사용하여 액세스 할 수 있다는 점이 보안성에서는 큰 단점
메시지 가로채기 공격(man-in-the-middle), CSRF(Cross-Site Request Forgery) 공격, SQL 삽입 공격, DDpS공격 등에 취약
2. 표준의 부재와 개발 지용
: 공식화된 표준이 존재하지 않는다 따라서 관리가 어렵고 비용이 크게 들 수 있다
기존 API 기능을 확장하려고 할 때 광범위한 프로그래밍 지식이 필요하다
이렇게 자료를 찾아보고 나니, api 명세 작성이 무엇인지 대충은 알 것 같다
그런데 저번 프로젝트에서는 명세서 없이 작업하고 주석을 달아 놨었다
그렇게 했을 때도 어려운 점은 없었는데 왜 api 명세서가 필요하며
db등 아직 정해진 것이 없는데 어떻게 api 명세서를 먼저 작성할 수 있는 건지 궁금하다
저녁에 회의하면서 알게 되겠지만 아직은 잘 이해가 가지 않는다
API란? 비개발자가 알기 쉽게 설명해드립니다! - wishket
[Open API] 오픈 API 란? (tistory.com)
개발 초보를 위한 RESTful API 설계 가이드 (velog.io)
728x90'프로젝트' 카테고리의 다른 글
웹 API를 위한 JSON vs XML (0) 2023.04.25 프로젝트 기본 환경설정 - 1 (0) 2023.01.18 REST와 REST API (0) 2022.12.26 스프링 프레임워크(Framework)에 대하여, 스프링부트? (0) 2022.12.04 세션 로그인 구현 복습 (0) 2022.11.22