Skip to content

Objects API (Draft)

Justin edited this page Apr 9, 2014 · 5 revisions

Problems

Player별 정보를 기록하는 API는 V3기준으로 Item과 UserData가 있다. 그런데, 다음의 문제점이 있다.

  • Item이라는 이름 때문에, Item에는 게임내의 아이템을 넣어야 한다는 선입견이 있다.
  • Item은 일종의 singleton이기 때문에, instance 개념으로 클라이언트가 디자인될 때 제약이 생긴다. 예를 들어, 최근 모바일 게임의 '강화', '합성'의 구현이 어렵다
  • UserData와 Item이 분리되어 있어서, item_changes나 condition등에서 서로의 값을 참조할 수가 없도록 되어 있다.
  • Farm류 게임에서 일정 시간뒤에 아이템이 변경되는 것들을 안전하게(hacking-safe) 처리하기가 어렵다. (ex: Clash of Clans 에서 GoldMine 업그레이드시 1시간 후에 처리가 되어야 함)

Solution

Player별 정보를 저장하는 Object라는 새로운 개념을 만든다. Item과 UserData는 모두 deprecate 시킨다.

1. Object

Object는 기본적으로 다음 field를 가진다.

Name Type Description
id Number ID. 서버에서 generate한다.
class String Object의 class이름
value String value
value_type String String, Number, Boolean 중 하나
locked Option[Boolean] lock 여부
future Array of JSON Object TBD

1.1 Object의 사용

1.1.1 Get API 제공
  • Get을 할때, 기본적으로 id로 얻어온다.
  • class로도 얻어오는 걸 허용한다. 그러나 class로 여러개의 instance가 존재하는 경우 error 처리한다.
1.1.2 Set API 제공
  • UserData처럼 Set을 할 수 있는 API 제공한다.
  • 만약 class 레벨에서 Set에 제한이 걸린경우 Set API 호출시 error 처리한다. 여기에 대해서는 ClassDescriptor 참고
1.1.3 Mission, IAP Conversion, Round 연동
  • Item에서와 마찬가지로 Mission, IAP Conversion, Round와 연동 한다.
1.1.4 Object Conversion 제공
  • ItemConversion의 대응 버전

1.2 Object의 Custom Fields

  • 위의 field외에 client에서 추가하는 custom field를 가질 수도 있다.
  • custom field의 type은 모두 string이다.
  • default 값 세팅은 ClassDescriptor를 이용한다.

2. ClassDescriptor

이전에 ItemProperty가 하는 기능에 더해서, Object에 제약 사항들을 정의한다. Object에 따라서 만들 수도 있고, 안만들 수도 있다.

Name Type Description
class String Object의 class이름
comment String 사용자가 참고하기 적어놓는 것. API 동작과 무관
value_type Option[String] value type을 지정. 지정 안하면, client가 정하는 대로 쓸 수 있음
value Option[String] default로 쓰이는 값
locked Option[Boolean] lock 여부
deny_update Array of JSON Object
Name Type Description
command String 'set','inc','dec','lock','unlock' 중 하나
field Option[String] command의 대상이 되는 field. 단 생략하는 경우 다음의 field에 자동으로 적용
'set', 'inc', 'dec'의 경우에 'value'.
'lock', 'unlock'의 경우에는 'locked'에 적용
recharges_in_sec Option[Number] recharge 주기. value_type이 'Number'이어야 함
max_recharged_value Option[Number] recharge로 max가 될 수 있는 value 값
fields JSON Objects custom field의 default 값들. JSON Object의 key와 value 모두 string

Consideration

기존의 UserData와 Item에 저장된 정보는 어떻게 할것인가?

1. Migration

기존 데이터 migration. 2~3일 작업 분량 정도 되지 않을까 생각중. 그리고, migration이 제대로 안될 가능성도 있다.

#####2. DB, API서버, Partner 모두 분리 파닥파닥베이비런과 비트몬스터를 위해 그냥 놔두고, v4부터 다른 도메인을 이용한다.

Clone this wiki locally