3. API 연동하기

아래 화면은 이 튜토리얼에서 디플로이 연동용으로 사용할 더미 게임의 화면입니다.

_images/api_linkage_demo_main.png

계정 생성/로그인, 캐릭터 생성, 캐릭터 정보 보기 기능 등 게임에서 사용할 기본적인 기능들만 구현되어 있습니다.

우선 guest 계정으로 로그인 후, 테스트에 사용할 캐릭터 하나를 생성하겠습니다. 다음은 해당 작업을 완료한 후의 화면입니다.

_images/api_linkage_demo_create_char.png

Note

이 문서에서는 python, flask, sqlalchemy를 이용하여 API를 구현합니다.

Important

본 튜토리얼에서는 비동기 처리 없이 API를 구현합니다. 서비스용으로 구현하시는 경우에는 API server 에서 언급한 대로, 게임 서버상에 디플로이 연동 API를 구현 시 가능하면 비동기 방식으로 구현하시는 것을 권장드립니다.

API 연동 항목에서 설명한 것처럼, 아이펀 디플로이와의 연동을 위해서는 운영에 필요한 기능들을 지원하는 rest API를 구현할 필요가 있습니다. 구현해야 하는 API 들에 대한 정보는 레퍼런스 매뉴얼 를 참고하시기 바랍니다.

3.1. API 구현하기

3.1.1. 검색 조건 반환 API 구현하기

우선 사용자 정보 검색 시 사용 가능한 검색 조건들을 반환하는 API를 작성해 보겠습니다. 해당 역할을 하는 API 는 GET /cs-api/v1/account/search-condition 입니다.

해당 API 에 대한 레퍼런스 매뉴얼 내의 설명 에 따르면 해당 API의 역할은 다음과 같습니다.

GET /cs-api/v1/account/search-condition

서버에서 지원하는 게임 유저 검색 조건을 JSON 으로 반환합니다. 이 때 검색 조건을 의미하는 문자열은 사용자가 구분할 수 있는 임의의 문자열로 지정하시면 됩니다. (게임 유저 검색 시에 이 문자열이 condition 이라는 URL 파라미터로 게임 서버에 전달됩니다)

아이펀 디플로에서 사용자 검색을 실행할 때, 이 API를 호출, 해당 결과를 사용자 검색 ui상에 표시합니다. 즉 이 API 는 ui유저 검색 시 검색 조건으로 어떠한 것들을 사용할 수 있는지 반환하는 API입니다.

본 튜토리얼에서는 계정의 id와, 캐릭터 레벨이 특정값보다 큰 캐릭터를 보유한 유저를 검색하는 조건, 이렇게 두 가지 조건을 지원하겠습니다.

@app.route('/cs-api/v1/account/search-condition', methods=['GET'])
def search_condition():
    return jsonify({"search_conditions": ["account_id", "ch_lev_greater"]})

이제 아이펀 디플로이에서 사용자 검색 시, 검색 조건으로 사용 가능한 것들애 대해 API 서버 에 문의하면 API 서버는 account_id, ch_lev_greater 두 가지 조건으로 사용자 검색이 가능하다고 응답합니다. 이후 아이펀 디플로이를 이용해 사용자 검색 시, 위의 두 조건 중 어떤 조건을 통해 사용자를 검색할 지 선택할 수 있으며 API 서버에 사용자 검색 요청 시 검색 조건과 값을 전달합니다.

3.1.3. 구현된 API 목록을 반환하는 api 구현하기

아이펀 디플로이에서는 연동 시 어떤 기능을 사용 가능한지 판단하기 위해 API 서버에 어떠한 API들이 구현되어 있는지를 문의합니다.

위에서 두 개의 API를 구현하였으므로, 연동을 위해서는 구현된 API 의 목록을 반환하는 API를 작성하고 위의 두 API 가 구현되었다는 정보를 반환해야 합니다.

Important

API의 종류에 따라, 구현된 API 목록 정보를 반환하지 않을 경우 API 가 실제로 구현되어 있더라도 디플로이와의 연동 시 문제가 생길 수 있습니다. API를 추가로 구현하셨다면 반드시 이 절에서 설명하는 작업을 수행해 주셔야 합니다.

레퍼런스 매뉴얼 내의 설명 을 참조하여 API를 구현하면 다음과 같습니다.

@app.route('/cs-api/v1', methods=['GET'])
def supported_api_list():
    return jsonify([
      ["GET", "/account/search-condition"],
      ["GET", "/account/search"],
    ])