탈출 비용 간과
많은 클라우드 제공자들이 각종 비용을 청구하며 이중 일부는 간과되기 쉽다. 시간당 기계 비용은 분명하지만 많은 사람들이 청구서에 ‘데이터 탈출’이 포함될 수 있다는 사실을 잊어버린다. API의 핵심 기능은 데이터를 사용자에게 탈출시키는 것이다. API 가격 책정 시 그리고 아키텍처 구상 시 이 비용을 고려해야 한다.
‘데이터 포맷 세금’ 무시
XML 등의 일부 데이터 형식은 다른 것들만큼 효율적이지 않다. API가 반환하는 데이터 패킷의 크기에 영향을 미칠 수 있다. 데이터 형식에서 추가적인 태그와 불편한 것들을 없앰으로써 회사의 비용을 40% 이상 절감하는 사례가 있을 정도다. 데이터 형식을 가능한 가볍게 유지하고 데이터를 필요한 비트에만 집중시켜 대역폭 비용을 관리한다.
장식적 기능 간과
때로는 API 개발자는 다소 멋으로 덧붙이는 기능을 포함시킨다. 대부분의 경우에는 사용하지 않더라도 문제가 발생하지 않는다. 하지만 알려지지 않은 보안 구멍이 남아 있을 수 있다.
임의 코드를 실행하는 기능을 Log4J 라이브러리에 추가한 프로그래머는 인터넷 역사상 최악의 보안 버그를 만들 계획이 아니었을 것이다. 그러나 사람들이 거의 사용하지 않는 이 기능이 불러올 위험성에 관해 잊어버렸을 때 그런 상황이 발생했다. 이런 경우에는 너무 창의적이거나 똑똑하지 않은 것이 도움이 된다. 최소한을 고수하는 것이 항상 훌륭한 제품을 개발하는 최고의 방법은 아니지만 안전한 API를 만드는 좋은 방법일 수 있다.
사전 필터링 잊어버리기
대부분의 API는 별다른 기능이 없다. 입력값을 받아 다른 코드로 전달한다. API가 제공할 수 있는 최고의 서비스는 사전 필터링을 통해 입력값이 기대치와 일치하는지 확인하는 것이다. 다수의 악성 보안 공격의 일부 API의 안일한 호의를 악용하여 버퍼를 넘치게 하거나 SQL 주입 공격을 시도한 것들이었다.
테스트에 인색하기
많은 개발자들이 기본적인 몇 가지 테스트 URL을 보유하고 있다. API로부터 적절한 패킷이 반환되면 모든 것이 원활하게 작동한다고 가정한다. 그러나 현실에서는 테스트 결과가 캐시 처리되고 단순한 테스트 URL은 첫 번째 레이어만 실행하는 경우가 많다. 좋은 테스트 스위트는 데이터베이스와 보조 API 또는 서비스에 대한 연결 등 API의 모든 부분을 평가한다.
잘못된 CORS 구성
CORS(Cross-Origin Resource Sharing) 문제는 브라우저에서 API의 응답이 직접 다른 콘텐츠와 혼합될 때 나타날 수 있다. 서둘러 API를 사용하는 일부 API 사용자에게는 문제가 될 수 있다. 때로는 태그 ACAO(Access-Control-Allow-Origin)를 헤더에 추가해야 한다. 때로는 스택에 완전 프록시를 구축하는 것이 낫다.
잘못된 인증 선택
API와 관련해 적절한 양의 인증을 파악하는 것도 중요하다. 일부 데이터는 과도하게 민감하지 않다. 이러한 API의 유일한 기능은 사용자를 추적하여 청구서를 파악하는 것이다. 이런 단순한 경우에는 변경되지 않는 무작위 키로 충분할 수 있다. 하지만 놀랍도록 민감할 수 있는 개인 정보를 다뤄야 하는 API들도 있다. 이런 경우 OAuth 2.0, OpenID, JWT 등의 더욱 안전한 프로토콜이 더 나은 선택이다. 프로토콜의 양쪽을 위한 좋은 라이브러리가 이미 존재하기 때문에 보안 업그레이드 시 새 코드를 많이 작성할 필요가 없다.