posted by DGDragon 2017. 1. 24. 19:34

http://community.eveonline.com/news/dev-blogs/introducing-esi/

Introducing ESI - A new API for EVE Online


참고: 이 데브 블로그는 주로 서드파티 개발자 및 기술적 관심이 있는 캡슐리어를 대상으로 합니다. 전문 용어를 건너뛰려면 아래로 스크롤하여 요약을 찾으십시오.


팀 테크 컴퍼니 왔습니다! 우리는 API를 다시 위대하게 만드는 것에 대해 당신과 함께 채팅을 하고 싶습니다!


Backstory


XML API가 처음 발표되었을 때, 그것은 지각 변동이었습니다. 어떤 비디오 게임도 데이터에 대하여 그렇게 광범위한 액세스를 제공하지 못했고, 여러분들은 그걸로 놀라운 일을 해 냈습니다. EVEMon과 EFT는 수년간 EVE를 지원해온 전설적인 도구이며, XML API를 활용하여 플레이어가 만든 새롭고 강력한 솔루션으로 결합되었습니다. 그러나 XML API는 제한적이었으며 특정 데이터만 노출 할 수 있고, 읽기 전용이었으며 때로는 게임의 이벤트에 반응하는 속도가 느렸습니다. 치명적으로, 체계적인 문서화는 악몽이었고, 영원히 실제 개발에 뒤쳐져 있었고 본질적으로 발견되지 않았습니다.


그래서 우리는 CREST를 소개했고, 그것 또한 지각 변동이었습니다. 보다 깨끗한 데이터 형식, RESTful 인터페이스 및 실시간 시뮬레이션 데이터에 대한 빠른 액세스를 제공합니다. 마침내, 게임 산업에서 크게 알려지지 않았지만, 그것은 쓰기 가능한 API의 방법을 소개했습니다(역주: 대표적으로는 피팅 툴에서 이브로 피팅을 바로 집어넣는 기능). CREST를 기반으로 구축된 작업 중 일부는 엄청난 것입니다. 우리는 항상 강력한 기능으로 할 수 있는 것을 최대한 활용하는 새롭고 참신한 아이디어에 귀 기울이고 있습니다.


CREST는 또한 자체 문서화에 대한 이상을 촉구했습니다. 자동 생성된 옵션 호출과 API의 루트에서 링크하는 패러다임의 결합은 완전히 자체 문서화 API를 제공하는 것이었습니다. 이는 부분적으로 성공한 것으로 CREST API를 크롤링하는 것은 확실히 사용자에게 좋은 방법입니다. 그러나 실금이 보이기 시작합니다. 트리의 큰 부분은 올바른 콥 역할이나 시타델 소유와 같이 게임 조건이 충족되지 않는 한 크롤링 할 수 없으며, 모든 리소스가 올바르게 링크되어있는 것은 아닙니다. 왜 사물에 접근 할 수 없는지를 말하기가 어려울 수 있습니다. CREST 개발자는 여전히 API에 대한 전체 설명을 위해 제 3 자 설명서를 정기적으로 참조합니다. 대담한 시도였지만 조금 모자랐습니다.


CCP는 항상 게임 산업에서 API 개발의 최전선에 서 있었고 여기서 멈추지 않고 지금의 월계관에 머무르지 않을 것입니다. 우리는 CREST와 XML API의 장점을 비판적으로 검토했습니다. 그리고 이제는 현대화 할 때입니다! 계속 읽어주세요...


Meanwhile, in the wider industry...


지난 몇 년 동안, 소프트웨어 산업의 나머지는 다양한 API를 만들고 그들의 디자인을 고려하는 데 바빴습니다. 커스텀 메이드의 혼란 속에서 JSON 스키마 표준이 생겨났습니다. 이것은 ESI의 핵심 개념이며 Swagger Specification은 다음과 같이 말합니다.


Swagger ™는 RESTful API를 설명하고 문서화하는데 사용되는 프로젝트입니다.


Swagger 사양은 이러한 API를 설명하는 데 필요한 일련의 파일을 정의합니다. 그런 다음 이 파일을 Swagger-UI 프로젝트에서 사용하여 API를 표시하고 Swagger-Codegen을 사용하여 다양한 언어로 클라이언트를 생성 할 수 있습니다. 추가 유틸리티는 테스트 도구와 같은 결과 파일을 활용할 수도 있습니다.


Swagger는 광범위하게 채택된 API 기술 표준이며 소수의 평판 좋은 조직에 의해 뒷받침되어 클라이언트 라이브러리, 사용자 인터페이스 및 기타 툴링에 대한 내구성과 지원에 대한 확신을 줍니다. Swagger 사양 (현재 OpenAPI라고 함)을 채택하면 여러 가지 작업을 제거하고 사용자 정의 통합을 구축 할 수있는 명확한 참조 점을 제공합니다.


이에 근거하여 우리가 만들기로 결정한 EVE Swagger Interface는 라우팅, 인증, 입출력 검증 등을 처리하는 동시에 여러 Kubernetes 서비스의 부분 사양을 응집력 있는 전면 규격으로 집계하는 프레임 워크입니다. EVE Swagger Interface (짧고 간단하게 ESI"이지"라고 부를 수 있는)는 내부적으로 Flask 및 Python 3.4+를 사용하며 Kubernetes 클러스터에서 실행되는 oauth-backed (또는 unauthed), 다중 점유자 API를 작동시키기에 충분히 일반적이어야합니다. Docker 또는 로컬 Python을 사용하여 ESI를 로컬로 실행하는 옵션도 있습니다.


What is ESI to us?


지난 몇 개월 동안, 우리는 처음부터 새로운 API를 구축하기 위해 ESI 프레임 워크를 사용하고 개발해 왔습니다. ESI API는 RESTful이며 SSO 인증을 받았으며, documentation first이며,  buzzword compliant이며, 수평 확장이 가능한 읽기 / 쓰기 API입니다. 현재 EVE 모바일 앱을 지원하고 있으며(역주: 이것 때문에 이브 모바일 앱이 늦어진 것으로 보임) Google Cloud의 Kubernetes 클러스터에서 실행 중입니다 (Kubernetes는 굉장합니다). 그래서 이것이 무엇을 의미할까요?


RESTful and SSO authenticated은 CREST와 거의 동일한 방식으로 상호 작용한다는 것을 의미합니다. 엔드 포인트에 인증이 필요한 경우 베어러 권한 부여 토큰과 함께 HTTPS 요청을 사용합니다. CREST 개발을 해본 경험이 있다면 편안한 안락 의자에 앉아있는 것처럼 느껴질 것입니다.


documentation first는 먼저 내부적으로 Swagger 사양을 사용하여 API를 생성한다는 것을 의미합니다. 엔드 포인트를 작성하거나 갱신하는 단계는 스펙을 작성 또는 갱신하는 것입니다. 스펙은 엔드 포인트로 들어오는 요청을 처리하기 위해 모든 내부 데이터 구조를 정의하는 것이 엔드 포인트 코딩의 핵심 부분이므로, 문서가 항상 최신 상태임을 의미합니다. 지금은 보지 마세요, 하지만 우리는 이 문서화 그렘린을 해결할 것입니다. 또한 Swagger 사양을 통해 제 3 자 커뮤니티는 코드 생성기를 사용하여 ESI API 용 네이티브 코드 인터페이스를 원하는 언어로 만들 수 있습니다. CREST 및 XML API를 위한 수작업으로 생성 된 인터페이스를 힘들이지 않게 처리하는 데 소요된 많은 양의 엔지니어링 시간이 이제 이 작업에서 제외될 수 있습니다. (우리는 당신을 로봇으로 대체하고 있습니다, 미안합니다.)


Buzzword compliant는 업계 표준 도구를 사용하고 있음을 의미합니다. 이 우주선을 함께 묶는 커스텀 접착제는 가능한 한 최소화되어 있습니다. 솔루션이 출시되면 상용 제품의 오픈 소스 기술에 대한 맞춤형 자료를 교체합니다. EVE API는 유지 보수가 불가능했고 확장성이 없었습니다. 하지만 이제는 이전에는 없었던 새로운 기능을 제공합니다. 사소한 패치는 개발자 컴퓨터에서 단 몇 분 만에 실시간으로 프로덕션 환경으로 이동할 수 있으며 필요에 따라 어느 방향으로든 중단 시간 없이 빠르게 롤백 할 수 있습니다.


수평 확장성은 Kubernetes에서 얻을 수있는 깔끔한 기능입니다. Tranquility에서 특별히 실행해야 할 필요가 없는 모든 ESI 코드는 상태 비저장 및 Google Cloud에서 실행되기 때문에 필요에 따라 새로운 ESI 컨테이너를 엔드 포인트별로 회전시켜 로드를 관리하고 더이상 필요하지 않을 때 다시 종료할 수 있습니다.


물론 읽기 / 쓰기는 CREST와 마찬가지로 쓰기가 가능한 API 엔드 포인트를 만들 계획입니다. 지금까지는 메일 발송과 같이 문제가 있는 API 엔드 포인트 중 일부를 포함합니다. 기본적으로 CREST와 비슷하지만 더 좋습니다.


What about XML API and CREST?


이것은 당신이 당황하지 않아야 할 부분입니다. 모든 애플리케이션을 죽이고 즉시 다시 작성해야한다는 얘기는 아니지만 정당성과 분열에 대해 이야기해야합니다. 유사하지만 중첩되지 않는 기능을 가진 3 개의 API를 지원하면 EVE API를 사용하는 응용 프로그램을 만드는 기술적인 어려움이 커지고 Tech Co의 엔지니어링 시간이 기능 및 유지 관리에서 벗어납니다. 그것은 민첩성을 줄이고 불확실성을 증가시키며 장기적인 계획으로 좋은 것은 아닙니다.


ESI에서 모든 현재 CREST 및 XML API 기능을 복제하면 두 서비스를 모두 종료할 것입니다. 우리는 동등한 기능을 달성하고 애플리케이션 개발자와 협력하여 애플리케이션을 업그레이드하기 위해이 블로그의 출시로부터 18 개월을 목표로 삼고 있습니다. XML API를 사용할 필요성을 제거하는 것이 우리의 최우선 사항입니다. 우리는 XML API 및 CREST의 사용을 모니터링하여 타사 개발자를 확인하고 마이그레이션 작업을 지원할 것입니다.


이것은 작업의 정연하고 측정된 반감기가 될 것입니다. 첫 번째 단계로서 개발자는 이 블로그의 릴리스 시점에 CREST 및 XML API가 공식적으로 메인터넌스만 되는 모드임을 알아야 합니다. 우리는 보안 업데이트 및 치명적인 버그 수정을 계속해서 배포할 예정이지만 새로운 기능 요청은 ESI API에만 구현될 것입니다.


Early access


지난 한 달 동안 우리는 서드 파티 개발자 커뮤니티의 적극적인 회원들과 긴밀히 협력해 왔으며, 결과는 아래를 포함합니다:


Steve Ronuken, CSM member and creator of fuzzwork.co.uk

Lucia Denniard, prolific #devfleet poster and pizza-auth/timerboard.net developer

Squizz Caphinator, creator of zkillboard.com and evewho.com


우리는 포커스 그룹과 마찬가지로 이 팀과 협력하여 초기 개발주기 및 초기 설계 결정에 대한 피드백을 받았습니다. 여기 이들이 지금까지 자신의 경험에 대해 이야기하는 것을 실었습니다:


새로운 API인 ESI는 CREST가 작동하는 방식과 유사하기 때문에 변환이 비교적 간단합니다. 또한 EVE API 개발의 큰 버그베어 중 하나를 해결합니다. 문서 및 예제가 부족합니다. Swagger를 사용하면 작업이 훨씬 쉬워지고 개발 과정에서 일부 불일치가 해결됩니다. 마침내 EVEMail을 전송하고 수신하는 기능을 개방하는 것은 중요한 일이며 그렇지 않으면 할 수 없는 자동화된 서비스가 가능해질 것입니다.


- Steve Ronuken


ESI는 CCP가 수년 동안 가지고 있었던 문제에 대한 해결책입니다. 즉, 서드파티를 위해 API를 쉽고 빠르게 업데이트 할 수 없다는 것입니다. 지난 몇 주 동안 함께 일한 개발자들은 ESI가 적응 가능하고 새로운 기능을 신속하게 구현할 수 있는 능력을 보여주었습니다. 나는 많은 서드파티 개발자들이 자신의 도구 중 많은 것을 다시 작성해야한다는 것에 만족하지 않을 것이라는 것을 알고 있습니다. 나 또한 그들 중 하나입니다. 그러나 이것은 우리가 발생한 기술적 부채의 대가입니다. CCP는 과거의 기술적 빚을 제거하고 현대적인 접근 방법을 찾고 있습니다. EveWho.com은 이미 ESI를 사용하고 있으며 지금까지의 결과에 매우 만족합니다.


- Squizz Caphinator


EVE Swagger Interface는 문서화를 공식 기능으로 소개하면서 CREST의 기능과 XML API의 유용성을 결합합니다. CREST의 크롤 가능 유형 시스템은 사람들이 동적 언어로 큰 일을 할 수 있게 해주었으며 ESI는 정적 유형의 언어를 사용하여 이러한 차이를 줄였습니다. 훨씬 강력한 인터페이스 정의를 제공하고 CREST의 유용성 측면을 개선합니다. 이 프로젝트는 CREST를 개선하고 XML API를 현대화하며 새 이민자를 위해 EVE를 보다 쉽게 개발할 수 있는 완벽한 후속 조치라고 생각합니다.


- Lucia Denniard


요약


ESI라는 새로운 API가 EVE에 제공됩니다. OpenAPI 사양을 기반으로 하며, 완벽하게 문서화되어 있으며 EVE Online용 응용 프로그램을 개발하기로 선택한 경우 더 쉽게 사용할 수 있습니다. 몇 달 동안 계속 늘어나고 있으며 현재 하루 450만 건의 요청을 처리하고 있습니다.


서드파티 개발자가 아니라면 다음 1년에서 2년 동안 사용하는 앱이 API 키 기반에서 EVE SSO 로그인으로 이동하는 것을 볼 수 있을 것입니다. 이는 보안상의 이점을 가져오고 응용 프로그램 권한 부여의 복잡성을 줄입니다.


이미 새 EVE 모바일 앱 및 서드파티 개발자가 사용하고 있습니다. 지금 직접 확인해보십시오. https://esi.tech.ccp.is/에 게시되어 있습니다.


질문, 의견, 우려 사항? 우리는 EVE Online 포럼과 Reddit 모두에서 스레드를 모니터링하거나 tweetfleet slack (@ccp_snowedin, @ccp_bartender, @ccp_aquarhead, @ccp_chimichanga)에 대해 Team Tech Co의 다른 사람과 논의할 것입니다. 우리는 거의 항상 #devfleet 채널에 있습니다. 또한 ESI 토론 및 도움을 위한 새로운 채널을 열었으며 tweetfleet slack 채널 이름 #ESI도 열었습니다.


영광스러운 미래를 향해!


추신 : ESI 디자인에 더 관심이 있다면 해당 블로그 ESI API 소개를 확인하십시오.