좋은 api란

작성자

api란

API(Application Programming Interface)는 응용 프로그램 프로그래밍 인터페이스로 응용프로그램에서 사용할 수 있도록 만든 인터페이스를 의미한다.

api의 역할

서버와 데이터베이스에 대하여 출입구와 같은 역할을 수행한다.
허용된 사람들에게 접근성을 부여한다.
각 기기가 데이터를 원활하게 주고받을 수 있도록 돕는 역할을 수행한다.

api 방식의 종류

soap api
rest api
SOAP & REST SOAP : Simple Object Access Protocol로 XML 기반의 프로토콜이다. 플랫폼에 독립적인 방식으로 인터넷을 통해 테이터를 교환하기 위해 설계되었다. ————————————————————————————————————————————— REST : Representational State Transfer로 웹 서비스 및 API 구현에 널리 사용되는 아키텍쳐 스타일이다. 각 리소스를 고유한 URI로 식별되며 GET/POST/PUT/DELETE와 같은 메소드로 리소스에 엑세스하는 것이 가능하다.

URI란?

URL은 서버 컴퓨터에서 클라이언트가 요청한 파일의 디렉토리를 나타내지만 URI는 자원의 고유 식별자(id)이다.

REST가 필요한 이유

웹 브라우저 외의 클라이언트에서 사용하기 위해서 (멀티 플랫폼)
멀티 플랫폼이 발전하면서 웹 페이지를 위한 HTML 및 이미지 등을 보내던 것과 달리 이제는 데이터만 보내면 여러 클라이언트에서 해당 데이터를 적절히 보여주기만 하면 되지만 html같은 파일을 보내는 것은 무겁고 브라우저가 모든 앱에 있는 것은 아니기 때문에 알맞지 않다.
→ RESTful API를 통해서 데이터만 주고 받기 때문에 여러 클라이언트가 자유롭고 부담없이 데이터를 이용할 수 있다.
→ 서버 또한 요청한 데이터만 보내주면 되기 때문에 가볍고 유지보수가 좋아진다.

RESTful

REST API의 설계 의도를 명확하게 지킴으로써, 각 구성 요소들의 역할이 확실하게 분리되어 있고 URI만 보더라도 리소스를 명확하게 인식할수 일도록 표현한 설계 방식

예시

안좋은 예시

@PostMapping("/user/save") @ResponseBody public Long saveUser(UserDTO userDTO) { return userSave.saveUser(userDTO); } @GetMapping("/user/get/{branch}") @ResponseBody public userReturnDto getUserByBranch (@PathVariable String branch) { return userSave.getuserByBranch(branch); } @PutMapping("user/update/{branch}/{code}") @ResponseBody public Long updateUser(@PathVariable (name = "branch") @NotBlank String branch, @PathVariable (name = "code") @NotBlank String code, UserDTO userDTO) { return userService.updateUser(branch, code, userDTO); } @DeleteMapping("user/delete/{branch}/{code}") @ResponseBody public Long updateUser(@PathVariable (name = "branch") @NotBlank String branch, @PathVariable (name = "code") @NotBlank String code, UserDTO userDTO) { return userService.updateUser(branch, code); }
Java
복사

좋은 예시

@PostMapping("/user") @ResponseBody public Long saveUser(UserDTO userDTO) { return userSave.saveUser(userDTO); } @GetMapping("/user/{branch}") @ResponseBody public userReturnDto getUserByBranch (@PathVariable String branch) { return userSave.getuserByBranch(branch); } @PutMapping("user/{branch}/{code}") @ResponseBody public Long updateUser(@PathVariable (name = "branch") @NotBlank String branch, @PathVariable (name = "code") @NotBlank String code, UserDTO userDTO) { return userService.updateUser(branch, code, userDTO); } @DeleteMapping("user/{branch}/{code}") @ResponseBody public Long updateUser(@PathVariable (name = "branch") @NotBlank String branch, @PathVariable (name = "code") @NotBlank String code, UserDTO userDTO) { return userService.updateUser(branch, code); }
Java
복사

SOAP API

SOAP는 simple object access protocol의 약자로 프로토콜의 일종이라고 할 수 있다.
보안이나 메시지 전송 등에 있어 REST 보다 더 많은 표준들이 정해져 있어 좀 더 복잡하다.
SOAP API는 보안 수준이 엄격하여 SSL도 지원하고 자체 표준의 보안 기능을 가지고 있다.
→ 보안 수준이 높아야 하는 은행용 모바일 앱 등에서 SOAP방식을 선호한다.
SSL : Secure Sockets Layer(보안 소켓 계층) 웹 사이트와 브라우저 사이에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술

좋은 API의 기준

오류를 알기쉬운 api
api가 생성된 목적과 사용법을 바로 이해할 수 있는 api
api내부의 구현 세부 정보를 비밀로한 api

기준을 잡은 이유

오류를 알기 쉬운 api

오류가 발생하였을때 api의 결과를 명시적으로 알려주어서 일어난 문제들에 대하여 빠르게 대처가 가능하도록 만들어야 한다.

api가 생성된 목적과 사용법을 바로 이해할 수 있는 api

따로 정의된 문서를 읽지 않아도 api의 기능을 바로 설명이 가능해야한다.

api 내부의 구현 세부 정보를 비밀로한 api

api내부의 구조를 다른 사람이 알게 되면 취약점을 쉽게 찾을 가능성이 생기기 때문에 보안 이슈를 만들지 않기 위해서는 내부의 세부 정보는 비밀로 하여야 한다.