-
Notifications
You must be signed in to change notification settings - Fork 0
Objects API (Draft)
Player별 정보를 기록하는 API는 V3기준으로 Item과 UserData가 있다. 그런데, 다음의 문제점이 있다.
- Item이라는 이름 때문에, Item에는 게임내의 아이템을 넣어야 한다는 선입견이 있다.
- Item은 일종의 singleton이기 때문에, instance 개념으로 클라이언트가 디자인될 때 제약이 생긴다. 예를 들어, 최근 모바일 게임의 '강화', '합성'의 구현이 어렵다
- UserData와 Item이 분리되어 있어서, item_changes나 condition등에서 서로의 값을 참조할 수가 없도록 되어 있다.
- Farm류 게임에서 일정 시간뒤에 아이템이 변경되는 것들을 안전하게(hacking-safe) 처리하기가 어렵다. (ex: Clash of Clans 에서 GoldMine 업그레이드시 1시간 후에 처리가 되어야 함)
Player별 정보를 저장하는 Object라는 새로운 개념을 만든다. Item과 UserData는 모두 deprecate 시킨다.
Object는 기본적으로 다음 field를 가진다.
| Name | Type | Description |
|---|---|---|
| id | String | ID. 서버에서 generate한다. |
| class | String | Object의 class이름 |
| value | String | value |
| value_type | String | String, Number, Boolean 중 하나 |
| future | Array of JSON Object | TBD |
- UserData처럼 Set을 할 수 있는 API 제공한다.
- 만약 class 레벨에서 Set에 제한이 걸린경우 Set API 호출시 error 처리한다. 여기에 대해서는 ClassDescriptor 참고
- Item에서와 마찬가지로 Mission, IAP Conversion, Round와 연동 한다.
- ItemConversion의 대응 버전
- 위의 field외에 client에서 추가하는 custom field를 가질 수도 있다.
- custom field의 type은 모두 string이다.
- default 값 세팅은 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 |
|
|||||||||
| 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 |
기존 데이터 migration. 2~3일 작업 분량 정도 되지 않을까 생각중. 그리고, migration 이 제대로 안될 가능성도 있다.
#####2. DB, API서버, Partner 모두 분리 파닥파닥베이비런과 비트몬스터를 위해 그냥 놔두고, v4부터 다른 도메인을 이용한다.
- Path: /:version/objects/list
- Authentication Header: X-APP-KEY, X-AUTH-UUID, X-AUTH-TOKEN
- Method: GET
- Parameters:
Name Type Description object Array of String [class]:[id]. id는 생략 가능. class가 'sword'이고, id가 'A'라면 'sword:id'가 됨
https://[server-url]/:version/objects/list?object=money&object=sword:A&object=sword:B
- Response Body: JSON
| Name | Type | Description |
|---|---|---|
| result_code | Number | Error Code 참고 |
| result_message | Option[String] | 실패한 경우에 메시지 있을 수 있음 |
| objects | Array of JSON Object | Object의 array |
-
Path: /:version/objects/create
-
Authentication Header: X-APP-KEY, X-AUTH-UUID, X-AUTH-TOKEN
-
Method: POST
-
Request Body:
Name Type Description objects Array of JSON Object Name Type Description class String 생성하려고 하는 instance의 class 이름 -
Response Body: JSON
| Name | Type | Description |
|---|---|---|
| result_code | Number | Error Code 참고 |
| result_message | Option[String] | 실패한 경우에 메시지 있을 수 있음 |
| objects | Array of JSON Object | object |
-
Path: /:version/objects/set
-
Authentication Header: X-APP-KEY, X-AUTH-UUID, X-AUTH-TOKEN
-
Method: POST
-
Request Body:
Name Type Description objects Array of JSON Object Name Type Description class String class 이름 id Option[String] instance의 id. singleton인 경우 생략 [field name] String, Number or Boolean field에 들어갈 값 -
Response Body: JSON
| Name | Type | Description |
|---|---|---|
| result_code | Number | Error Code 참고 |
| result_message | Option[String] | 실패한 경우에 메시지 있을 수 있음 |
| objects | Array of JSON Object | object |
'value' field의 값을 increase 한다.
-
Path: /:version/objects/increase
-
Authentication Header: X-APP-KEY, X-AUTH-UUID, X-AUTH-TOKEN
-
Method: POST
-
Request Body:
Name Type Description objects Array of JSON Object Name Type Description class String class 이름 id Option[String] instance의 id. singleton인 경우 생략 amount Number increase할 값 -
Response Body: JSON
| Name | Type | Description |
|---|---|---|
| result_code | Number | Error Code 참고 |
| result_message | Option[String] | 실패한 경우에 메시지 있을 수 있음 |
| objects | Array of JSON Object | object |
'value' field의 값을 decrease 한다.
-
Path: /:version/objects/decrease
-
Authentication Header: X-APP-KEY, X-AUTH-UUID, X-AUTH-TOKEN
-
Method: POST
-
Request Body:
Name Type Description objects Array of JSON Object Name Type Description class String class 이름 id Option[String] instance의 id. singleton인 경우 생략 amount Number decrease할 값 -
Response Body: JSON
| Name | Type | Description |
|---|---|---|
| result_code | Number | Error Code 참고 |
| result_message | Option[String] | 실패한 경우에 메시지 있을 수 있음 |
| objects | Array of JSON Object | object |
object를 제거
-
Path: /:version/objects/destroy
-
Authentication Header: X-APP-KEY, X-AUTH-UUID, X-AUTH-TOKEN
-
Method: POST
-
Request Body:
Name Type Description objects Array of JSON Object Name Type Description class String class 이름 id Option[String] instance의 id. singleton인 경우 생략 -
Response Body: JSON
| Name | Type | Description |
|---|---|---|
| result_code | Number | Error Code 참고 |
| result_message | Option[String] | 실패한 경우에 메시지 있을 수 있음 |
| objects | Array of JSON Object | object |
-
Path: /:version/objects/batch
-
Authentication Header: X-APP-KEY, X-AUTH-UUID, X-AUTH-TOKEN
-
Method: POST
-
Request Body:
Name Type Description changes Array of JSON Object Name Type Description class String Object의 class id Option[String] Object의 id. singleton인 경우 없음 method String Object Method 참고 field Option[String] method 대상이 되는 field. 'create'와 'destroy' 는 필요 없음 parameter Option[String or Number or Boolean] method 수행에 필요한 값 -
Response Body: JSON
| Name | Type | Description |
|---|---|---|
| result_code | Number | Error Code 참고 |
| result_message | Option[String] | 실패한 경우에 메시지 있을 수 있음 |
| objects | Array of JSON Object | 변경된 object |
Object의 method 종류는 다음과 같다.
| Name | Target Field Type | Description |
|---|---|---|
| set | String, Number, Boolean | 주어진 값으로 해당 field를 set 한다 |
| inc | Number | value field 값을 증가 시킨다 |
| dec | Number | value field 값을 감소 시킨다 |
| create | None | class 필요. object를 1개 생성 |
| destroy | None | id 필요. object를 소멸 |