{"action":"created","comment":{"url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/comments/38605308","id":38605308,"diff_hunk":"@@ -0,0 +1,1142 @@\n+# Arm Plugin Interface 2.0 Specification(2015/04/16)\n+\n+## Overview\n+\n+Hatohol Arm Plugin Interface (HAPI) 2.0 is the protocol for information exchange between Hatohol server and Monitoring server plugins.\n+It is designed as JSON-RPC appllication on the communication path that is consolidated between them.\n+\n+The following figure expresses the above overview.\n+\n+![overview](../hapi_overview.png)\n+\n+## Words\n+\n+|words|description|\n+|:---|:---|\n+|SRV|Hatohol server|\n+|HAP|Hatohol monitoring server plugin|\n+\n+\"MUST\", \"MUST NOT\", \"REQUIRED\", \"SHALL\", \"SHALL NOT\", \"SHOULD\", \"SHOULD NOT\", \"RECOMMENDED\", \"MAY\" and \"OPTIONAL\" conform to [RFC2119](http://www.ietf.org/rfc/rfc2119.txt).\n+\n+## Involved protocol\n+\n+### Communication path \n+\n+Use Advanced Message Queuing Protocol (AMQP) 0.9.1 as a communication channel.\n+- AMQP 0.9.1: https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf\n+\n+### JSON-RPC\n+\n+Use JSON-RPC 2.0 as a basic protocol of information exchange.\n+- [JSON-RPC 2.0 (2013-01-04)](http://www.jsonrpc.org/specification)\n+- [JSON(RFC4627)](https://www.ietf.org/rfc/rfc4627.txt)\n+\n+### Attention\n+\n+- Character encoding MUST be UTF-8. Normalization form SHOULD be C. String MAY escape.\n+- Enough randomness SHOULD be needed from ID object that is used in request and response.\n+- Must not use batch request of JSON_RPC in HAPI2.0(MUST NOT).\n+- HAPI2.0 does not assume to generate and use AMQP queue name dynamically. The user need to dicide queue name that is used when contanct to Hatohol server. HAPI2.0 assume Hatohol server and plugin use the above queue name.\n+\n+## Operating overview\n+\n+The following sequence figure describes basic operating of procedures request and response that are exchanged between Hatohol server and Hatohol arm plugin. \n+\n+```\n+\n+   SRV                                            HAP\n+    |\n+    |                                        Turn on HAP\n+    |                                              |\n+    |<----------exchangeProfile(Request)---------->|\n+    |<----------exchangeProfile(Response)--------->|\n+    |                                          |   |\n+    |                             Polling interval |\n+    |                                          |   |\n+    |<-----getMonitoringServerInfo(Request)--------|\n+    |------getMonitoringServerInfo(Response)------>|\n+    |                                              |\n+    |<-----------getLastInfo(Request)--------------|\n+    |------------getLastInfo(Response)------------>|\n+    |<------------putHosts(Request)----------------|\n+    |-------------putHosts(Response)-------------->|\n+    |                                              |\n+    |<-----------getLastInfo(Request)--------------|\n+    |------------getLastInfo(Response)------------>|\n+    |<---------putHostGroups(Request)--------------|\n+    |----------putHostGroups(Response)------------>|\n+    |                                              |\n+    |<-----------getLastInfo(Request)--------------|\n+    |------------getLastInfo(Response)------------>|\n+    |<-----putHostGroupMembership(Request)---------|\n+    |------putHostGroupMembership(Response)------->|\n+    |                                              |\n+    |<-----------getLastInfo(Request)--------------|\n+    |------------getLastInfo(Response)------------>|\n+    |<------------putTriggers(Request)-------------|\n+    |-------------putTriggers(Response)----------->|\n+    |                                              |\n+    |<-----------getLastInfo(Request)--------------|\n+    |------------getLastInfo(Response)------------>|\n+    |<------------putEvents(Request)---------------|\n+    |-------------putEvents(Response)------------->|\n+    |                                              |\n+    |<-----------getLastInfo(Request)--------------|\n+    |------------getLastInfo(Response)------------>|\n+    |<------------putHostParents(Request)----------|\n+    |-------------putHostParents(Response)-------->|\n+    |                                              |\n+    |<------------putArmInfo(Request)--------------|\n+    |-------------putArmInfo(Response)------------>|\n+    |                                          |   |\n+    |                             Polling interval |\n+    |                                          |   |\n+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n+    |                                              |\n+    |-----------fetchItems(Request)--------------->|\n+    |<----------fetchItems(Response)---------------|\n+    |<------------putItems(Request)----------------|\n+    |-------------putItems(Response)-------------->|\n+    |                                              |\n+    |-----------fetchHistory(Request)------------->|\n+    |<----------fetchHistory(Response)-------------|\n+    |<------------putHistory(Request)--------------|\n+    |-------------putHistory(Response)------------>|\n+    |                                              |\n+    |-----------fetchTriggers(Request)------------>|\n+    |<----------fetchTriggers(Response)------------|\n+    |<-----------putTriggers(Request)--------------|\n+    |                Use \"ALL\"option               |\n+    |-----------putTriggers(Response)------------->|\n+    |                                              |\n+    |-------------fetchEvents(Request)------------>|\n+    |<------------fetchEvents(Response)------------|\n+    |<------------putEvents(Request)---------------|\n+    |-------------putEvents(Response)------------->|\n+    |                                              |\n+    |--updateMonitoringServerInfo(notification)--->|\n+    |                                              |\n+\n+```\n+## Data type\n+\n+ - This section describes about data types that are defined for Hatohol. They(the data types) use date type that is defined in the JSON-RPC internally.\n+\n+|Name|JSON type|description|\n+|:---|:---------|:---|\n+|TimeStamp|string|This type is used to times of day. Time value MUST be stored in UTC. Format is YYYYMMDDhhmmss.nnnnnnnnn. YYYY, MM, DD, hh, mm, ss, and nnnnnnnnn each expresses the A.D., Month, Day, hour, minute, second, nano second. It can abbreviate nano second. If the above or nano second digits is less than nine, it will be inserted zero to fill digit(s)(Ex.100 -> 100.000000000, 100.1234 -> 100.123400000).|\n+|Boolean|true, false|This type is used to store boolean value. It can assign true or false to show authenticity of value.|\n+|Number|number|This type is used to store number value. It needs to be more than 0 and less than 2147483647.|\n+|String255|string|This type is used to store string value. It needs to be the number of characters less than 255 characters.|\n+|URI2047|string|This type is used to store string value. It MUST be the number of characters less than 2047. It should satisfy URI requirements which is defined in the RFC3986, RFC6874. And its octet size SHOULD be less than 2047.|\n+|String32767|string|This type is used to store string value. It needs to be the number of characters less than 32767 characters.|\n+\n+In any case, the number of character MUST be counted by UTF-32 code point number after applying NFC nomalization.\n+\n+## About start up operation\n+\n+ - Immediatery after starting or restarting Hatohol server and HAP, they exchange usable procedures information with exchangeProfile procedure. There can optimize procedures based on exchanged information.\n+\n+## Procedures\n+\n+ - [M/O] indicates whether Mandatory or Optional. Mandatory procedure can not abbreviate to implement.\n+ - When does not complete exchange profile yet to use exchangeProfile procedure and get other procedures, it must return [putResult](#user-content-putresult) response that is inserted \"FAILURE\" to result object.\n+\n+### Hatohol server procedures\n+\n+|name|description|type|M/O|\n+|:-------------|:---|:-----|:-:|\n+|[exchangeProfile](#user-content-exchangeprofilemethod)|Receive view of procedures that is implemented in HAP and HAP name, after that return procedures view that is implemented in yourself and yourself name.|method|M|\n+|[getMonitoringServerInfo](#user-content-getmonitoringserverinfomethod)|Return connecting information with HAP and polling interval seconds to HAP.|method|M|\n+|[getLastInfo](#user-content-getlastinfomethod)|Return latest information that is designated by request.|method|M|\n+|[putItems](#user-content-putitemsmethod)|Receive items view that is monitored by HAP.|method|O|\n+|[putHistory](#user-content-puthistorymethod)|Receive history of each item that is monitored by HAP.|method|O|\n+|[putHosts](#user-content-puthostsmethod)|Receive hosts view from HAP and update it.|method|O|\n+|[putHostGroups](#user-content-puthostgroupsmethod)|Receive host groups view from HAP and update it.|method|O|\n+|[putHostGroupMembership](#user-content-puthostgroupmembershipmethod)|Receive host group membership from HAP and update it.|method|O|\n+|[putTriggers](#user-content-puttriggersmethod)|Receive triggers view from HAP and update it.|method|O|\n+|[putEvents](#user-content-puteventsmethod)|Receive events view from HAP and update it.|method|O|\n+|[putHostParents](#user-content-puthostparentsmethod)|Receive host parent relations view from HAP and update it.|method|O|\n+|[putArmInfo](#user-content-putarminfomethod)|Receive connecting status of HAP and update it.|method|M|\n+\n+### HAP procedures\n+\n+|name|desscription|type|M/O|\n+|:-------------|:---|:-----|:-:|\n+|[exchangeProfile](#user-content-exchangeprofilemethod)|Receive view of procedures that is implemented in Hatohol server and Hatohol server name, after that return procedures view that is implemented in yourself and yourself name.|method|M|\n+|[fetchItems](#user-content-fetchitemsmethod)|Accept request to get item from Hatohol server.|method|O|\n+|[fetchHistory](#user-content-fetchhistorymethod)|Accept request to get history from Hatohol server.|method|O|\n+|[fetchTriggers](#user-content-fetchtriggersmethod)|Accept request to get trigger from Hatohol server.|method|O|\n+|[fetchEvents](#user-content-fetcheventsmethod)|Accept request to get event from Hatohol server.|method|O|\n+|[updateMonitoringServerInfo](#user-content-updatemonitoringserverinfomethod)|Receive connecting information with Hatohol server and polling interval seconds as a notification.|method|M|\n+\n+### exchangeProfile(method)\n+\n+Both of Hatohol server and HAP have procedure. This procedure is mainly used after starting and restarting. Please look at the [About start up operation](#user-content-about-start-up-content).\n+\n+***Request(params)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|procedures|String255 array|M|-|Usual procedures list of sender.|\n+|name      |String255    |M|-|Process name of sender. It is used in the log message and etc.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": {\n+    \"name\": \"exampleName\",\n+    \"procedures\": [\n+      \"getMonitoringServerInfo\",\n+      \"getLastInfo\",\n+      \"putItems\",\n+      \"putArmInfo\",\n+      \"fetchItems\"\n+    ]\n+  },\n+  \"method\": \"exchangeProfile\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|procedures|String255 array|M|-|Usual procedures list of destination.|\n+|name      |String255    |M|-|Process name of destination. It is used in the log message and etc.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": {\n+    \"name\": \"exampleName\",\n+    \"procedures\": [\n+      \"getMonitoringServerInfo\",\n+      \"getLastInfo\",\n+      \"putItems\",\n+      \"putHistory\",\n+      \"putHosts\",\n+      \"putHostGroups\",\n+      \"putHostGroupMembership\",\n+      \"putTriggers\",\n+      \"putEvents\",\n+      \"putHostParent\",\n+      \"putArmInfo\"\n+    ]\n+  },\n+  \"jsonrpc\": 2\n+}\n+```\n+\n+### getMonitoringServerInfo(method)\n+\n+This procedure is mainly used to acquire Hatohol server itself connection and polling interval information. And this procedure can call at the arbitrary point of the time.\n+\n+***Request(params)***\n+\n+ getMonitoringServerInfo method does not have arguments. It should request with a empty string parameter.\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": \"\",\n+  \"method\": \"getMonitoringServerInfo\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|serverId          |Number     |M|-|A Server ID of the monitoring server.|\n+|url               |URI2047    |M|-|A URL of monitoring server. [[Description](#user-content-servertype)]|\n+|type              |string     |M|-|A type of monitoring server. [[List](#user-content-servertype)]|\n+|nickName          |String255  |M|-|A nickname of monitoring server.|\n+|userName          |String255  |M|-|A user name of monitoring server.|\n+|password          |String255  |M|-|A pass word of monitoring server.|\n+|pollingIntervalSec|Number     |M|-|Polling interval seconds.|\n+|retryIntervalSec  |Number     |M|-|Retry interval seconds in case of fail polling.|\n+|extendedInfo      |String32767|M|-|This field can store an additional information.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": {\n+    \"serverId\": 1,\n+    \"url\": \"http://example.com:80\",\n+    \"type\": \"12345678-9abc-def0-1234-567891abcdef\",\n+    \"nickName\": \"exampleName\",\n+    \"userName\": \"Admin\",\n+    \"password\": \"examplePass\",\n+    \"pollingIntervalSec\": 30,\n+    \"retryIntervalSec\": 10,\n+    \"extendedInfo\": \"exampleExtraInfo\"\n+  },\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+### getLastInfo(method)\n+\n+This procedure is used for getting lastInfo which is stored in a Hatohol server before calling put series procedures.\n+Its lastInfo is used for put series procedures to calculate changes current value from previous value.\n+\n+No lastInfo in a Hatohol server, it SHALL return an empty string.\n+\n+***Request(params)***\n+\n+|params object value|Type |M/O|Default value|Description|\n+|:---------------------|:--|:-:|:----------:|:---|\n+|Designate element|String255|M|-|Need to select in the following elements list.|\n+\n+|Value list|Description|\n+|:-------------------------|:---|\n+|\"host\"               |Select latest host information.|\n+|\"hostGroup\"          |Select latest host group information.|\n+|\"hostGroupMembership\"|Select latest host group membership information.|\n+|\"trigger\"            |Select latest trigger information.|\n+|\"event\"              |Select latest event information.|\n+|\"hostParent\"         |Select latest host parent information.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": \"trigger\",\n+  \"method\": \"getLastInfo\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+|Object value|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|latest information|String255|M|-|Designate element latest information of to be saved in Hatohol server.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": \"201504011349\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+In this example, callee receive a timestamp as a lastInfo.\n+\n+### putItems(method)\n+\n+Standard behavior is to send all item information to Hatohol server when complete conect to Hatohol server and get [fetchItems](#user-content-fetchitemsmethod) request from Hatohol server. There is a possibility which places a high load on a Hatohol Server, so this procedure forbid to use at the arbitrary point of the time.\n+\n+***Request(params)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|items  |object   |M|-|This is an object that stores item information. In more detail, please refer the following table.|\n+|fetchId|String255|O|-|This is an ID which corresponds for request from Hatohol server. It should be contain fetchId only if it will be received fetchItems request.|\n+\n+***items object***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|itemId       |String255    |M|-|ID of the item.|\n+|hostId       |String255    |M|-|Host ID of the the item belongs.|\n+|brief        |String255    |M|-|Overview of the item.|\n+|lastValueTime|TimeStamp    |M|-|Time of when the item was last updated.|\n+|lastValue    |String255    |M|-|Value of when the item was last updated.|\n+|itemGroupName|String255 array|M|-|Group name of the item belongs.|\n+|unit         |String255    |M|-|Unit of value.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": {\n+    \"fetchId\": \"1\",\n+    \"items\": [\n+      {\n+        \"unit\": \"example unit\",\n+        \"itemGroupName\": \"example name\",\n+        \"lastValue\": \"example value\",\n+        \"lastValueTime\": \"20150410175500\",\n+        \"brief\": \"example brief\",\n+        \"hostId\": \"1\",\n+        \"itemId\": \"1\"\n+      },\n+      {\n+        \"unit\": \"example unit\",\n+        \"itemGroupName\": \"example name\",\n+        \"lastValue\": \"example value\",\n+        \"lastValueTime\": \"201504101755\",\n+        \"brief\": \"example brief\",\n+        \"hostId\": \"1\",\n+        \"itemId\": \"2\"\n+      }\n+    ]\n+  },\n+  \"method\": \"putItems\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+Caller receives result as a result object value whether sent data has been updated. Refer to the [[Values](#user-content-putresult)].\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": \"SUCCESS\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+### putHistory(method)\n+\n+ - When receive [fetchHistory](#user-content-fetchhistorymethod) procedure from Hatohol server, HAP returns matched history to conditions. This procedure has possibility that burden to Hatohol server, can not use at the arbitrary point of time. \n+\n+***Request(params)***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|itemId    |String255 |M|-|Id of the got item|\n+|samples   |object array|M|-|This is sample array to configure history information. In more detail, please refer the following table. The samples is needed to sort by ascending order of time.|\n+|fetchId|String255|O|-|This is an ID that indicates whether response for request from Hatohol server. Insert fetchId value to this object, in case of only receive fetchHistory request.|\n+\n+***samples object***\n+\n+|Object name|Type |M/O|Default value|Description|\n+|:-----------------|:--|:-:|:----------:|:---|\n+|value |String255|M|-|Item value at that time.|\n+|time  |TimeStamp|M|-|Time of recorded.|\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"params\": {\n+    \"fetchId\": \"1\",\n+      {\n+        \"time\": \"20150323113000\",\n+        \"value\": \"exampleValue\"\n+      },\n+      {\n+        \"time\": \"201503231130\",\n+        \"value\": \"exampleValue2\"\n+      }\n+    ],\n+    \"itemId\": \"1\"\n+  },\n+  \"method\": \"putHistory\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+***Result(result)***\n+\n+Caller receives result as a result object value whether sent data has been updated. Refer to the [[Values](#user-content-putresult)].\n+\n+```json\n+{\n+  \"id\": 1,\n+  \"result\": \"SUCCESS\",\n+  \"jsonrpc\": \"2.0\"\n+}\n+```\n+\n+### putHosts(method)\n+\n+Send all hosts information to Hatohol server to use \"ALL\" option when complete conect to Hatohol server and changed hosts information that saved in internal.","path":"en/README.md","position":448,"original_position":448,"commit_id":"a0ebfdef69cabd28c24c253ea04a19df0a5c5ee5","original_commit_id":"a0ebfdef69cabd28c24c253ea04a19df0a5c5ee5","user":{"login":"cosmo0920","id":700876,"avatar_url":"https://avatars.githubusercontent.com/u/700876?v=3","gravatar_id":"","url":"https://api.github.com/users/cosmo0920","html_url":"https://github.com/cosmo0920","followers_url":"https://api.github.com/users/cosmo0920/followers","following_url":"https://api.github.com/users/cosmo0920/following{/other_user}","gists_url":"https://api.github.com/users/cosmo0920/gists{/gist_id}","starred_url":"https://api.github.com/users/cosmo0920/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cosmo0920/subscriptions","organizations_url":"https://api.github.com/users/cosmo0920/orgs","repos_url":"https://api.github.com/users/cosmo0920/repos","events_url":"https://api.github.com/users/cosmo0920/events{/privacy}","received_events_url":"https://api.github.com/users/cosmo0920/received_events","type":"User","site_admin":false},"body":"> when complete connect\r\n\r\nあ、ここもだ。動詞が連続してる。\r\n動詞に完了の意味を持たせるには現在完了形という時制を使いましょう。","created_at":"2015-09-03T01:28:30Z","updated_at":"2015-09-03T01:28:30Z","html_url":"https://github.com/project-hatohol/HAPI-2.0-Specification/pull/73#discussion_r38605308","pull_request_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/73","_links":{"self":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/comments/38605308"},"html":{"href":"https://github.com/project-hatohol/HAPI-2.0-Specification/pull/73#discussion_r38605308"},"pull_request":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/73"}}},"pull_request":{"url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/73","id":43953206,"html_url":"https://github.com/project-hatohol/HAPI-2.0-Specification/pull/73","diff_url":"https://github.com/project-hatohol/HAPI-2.0-Specification/pull/73.diff","patch_url":"https://github.com/project-hatohol/HAPI-2.0-Specification/pull/73.patch","issue_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/73","number":73,"state":"open","locked":false,"title":"Make english document2","user":{"login":"Mnakagawa","id":7106792,"avatar_url":"https://avatars.githubusercontent.com/u/7106792?v=3","gravatar_id":"","url":"https://api.github.com/users/Mnakagawa","html_url":"https://github.com/Mnakagawa","followers_url":"https://api.github.com/users/Mnakagawa/followers","following_url":"https://api.github.com/users/Mnakagawa/following{/other_user}","gists_url":"https://api.github.com/users/Mnakagawa/gists{/gist_id}","starred_url":"https://api.github.com/users/Mnakagawa/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Mnakagawa/subscriptions","organizations_url":"https://api.github.com/users/Mnakagawa/orgs","repos_url":"https://api.github.com/users/Mnakagawa/repos","events_url":"https://api.github.com/users/Mnakagawa/events{/privacy}","received_events_url":"https://api.github.com/users/Mnakagawa/received_events","type":"User","site_admin":false},"body":"","created_at":"2015-09-02T04:36:52Z","updated_at":"2015-09-03T01:28:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"74ed8df5b8880e3c8e00784e7f243e59fae45a86","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/73/commits","review_comments_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/73/comments","review_comment_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/comments{/number}","comments_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/73/comments","statuses_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/statuses/a0ebfdef69cabd28c24c253ea04a19df0a5c5ee5","head":{"label":"project-hatohol:make-english-document2","ref":"make-english-document2","sha":"a0ebfdef69cabd28c24c253ea04a19df0a5c5ee5","user":{"login":"project-hatohol","id":4715745,"avatar_url":"https://avatars.githubusercontent.com/u/4715745?v=3","gravatar_id":"","url":"https://api.github.com/users/project-hatohol","html_url":"https://github.com/project-hatohol","followers_url":"https://api.github.com/users/project-hatohol/followers","following_url":"https://api.github.com/users/project-hatohol/following{/other_user}","gists_url":"https://api.github.com/users/project-hatohol/gists{/gist_id}","starred_url":"https://api.github.com/users/project-hatohol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-hatohol/subscriptions","organizations_url":"https://api.github.com/users/project-hatohol/orgs","repos_url":"https://api.github.com/users/project-hatohol/repos","events_url":"https://api.github.com/users/project-hatohol/events{/privacy}","received_events_url":"https://api.github.com/users/project-hatohol/received_events","type":"Organization","site_admin":false},"repo":{"id":34365876,"name":"HAPI-2.0-Specification","full_name":"project-hatohol/HAPI-2.0-Specification","owner":{"login":"project-hatohol","id":4715745,"avatar_url":"https://avatars.githubusercontent.com/u/4715745?v=3","gravatar_id":"","url":"https://api.github.com/users/project-hatohol","html_url":"https://github.com/project-hatohol","followers_url":"https://api.github.com/users/project-hatohol/followers","following_url":"https://api.github.com/users/project-hatohol/following{/other_user}","gists_url":"https://api.github.com/users/project-hatohol/gists{/gist_id}","starred_url":"https://api.github.com/users/project-hatohol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-hatohol/subscriptions","organizations_url":"https://api.github.com/users/project-hatohol/orgs","repos_url":"https://api.github.com/users/project-hatohol/repos","events_url":"https://api.github.com/users/project-hatohol/events{/privacy}","received_events_url":"https://api.github.com/users/project-hatohol/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/project-hatohol/HAPI-2.0-Specification","description":"","fork":false,"url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification","forks_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/forks","keys_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/keys{/key_id}","collaborators_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/teams","hooks_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/hooks","issue_events_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/events{/number}","events_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/events","assignees_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/assignees{/user}","branches_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/branches{/branch}","tags_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/tags","blobs_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/refs{/sha}","trees_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/trees{/sha}","statuses_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/statuses/{sha}","languages_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/languages","stargazers_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/stargazers","contributors_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/contributors","subscribers_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/subscribers","subscription_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/subscription","commits_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/commits{/sha}","git_commits_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/commits{/sha}","comments_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/comments{/number}","issue_comment_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/comments{/number}","contents_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/contents/{+path}","compare_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/compare/{base}...{head}","merges_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/merges","archive_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/downloads","issues_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues{/number}","pulls_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls{/number}","milestones_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/milestones{/number}","notifications_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/labels{/name}","releases_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/releases{/id}","created_at":"2015-04-22T03:13:09Z","updated_at":"2015-05-13T09:50:41Z","pushed_at":"2015-09-02T08:43:02Z","git_url":"git://github.com/project-hatohol/HAPI-2.0-Specification.git","ssh_url":"git@github.com:project-hatohol/HAPI-2.0-Specification.git","clone_url":"https://github.com/project-hatohol/HAPI-2.0-Specification.git","svn_url":"https://github.com/project-hatohol/HAPI-2.0-Specification","homepage":null,"size":749,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":3,"forks":1,"open_issues":3,"watchers":0,"default_branch":"master"}},"base":{"label":"project-hatohol:master","ref":"master","sha":"ae6c4a93b8734e466b3e554038259a2fda932ba1","user":{"login":"project-hatohol","id":4715745,"avatar_url":"https://avatars.githubusercontent.com/u/4715745?v=3","gravatar_id":"","url":"https://api.github.com/users/project-hatohol","html_url":"https://github.com/project-hatohol","followers_url":"https://api.github.com/users/project-hatohol/followers","following_url":"https://api.github.com/users/project-hatohol/following{/other_user}","gists_url":"https://api.github.com/users/project-hatohol/gists{/gist_id}","starred_url":"https://api.github.com/users/project-hatohol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-hatohol/subscriptions","organizations_url":"https://api.github.com/users/project-hatohol/orgs","repos_url":"https://api.github.com/users/project-hatohol/repos","events_url":"https://api.github.com/users/project-hatohol/events{/privacy}","received_events_url":"https://api.github.com/users/project-hatohol/received_events","type":"Organization","site_admin":false},"repo":{"id":34365876,"name":"HAPI-2.0-Specification","full_name":"project-hatohol/HAPI-2.0-Specification","owner":{"login":"project-hatohol","id":4715745,"avatar_url":"https://avatars.githubusercontent.com/u/4715745?v=3","gravatar_id":"","url":"https://api.github.com/users/project-hatohol","html_url":"https://github.com/project-hatohol","followers_url":"https://api.github.com/users/project-hatohol/followers","following_url":"https://api.github.com/users/project-hatohol/following{/other_user}","gists_url":"https://api.github.com/users/project-hatohol/gists{/gist_id}","starred_url":"https://api.github.com/users/project-hatohol/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/project-hatohol/subscriptions","organizations_url":"https://api.github.com/users/project-hatohol/orgs","repos_url":"https://api.github.com/users/project-hatohol/repos","events_url":"https://api.github.com/users/project-hatohol/events{/privacy}","received_events_url":"https://api.github.com/users/project-hatohol/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/project-hatohol/HAPI-2.0-Specification","description":"","fork":false,"url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification","forks_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/forks","keys_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/keys{/key_id}","collaborators_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/teams","hooks_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/hooks","issue_events_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/events{/number}","events_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/events","assignees_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/assignees{/user}","branches_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/branches{/branch}","tags_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/tags","blobs_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/refs{/sha}","trees_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/trees{/sha}","statuses_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/statuses/{sha}","languages_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/languages","stargazers_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/stargazers","contributors_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/contributors","subscribers_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/subscribers","subscription_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/subscription","commits_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/commits{/sha}","git_commits_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/git/commits{/sha}","comments_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/comments{/number}","issue_comment_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/comments{/number}","contents_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/contents/{+path}","compare_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/compare/{base}...{head}","merges_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/merges","archive_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/downloads","issues_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues{/number}","pulls_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls{/number}","milestones_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/milestones{/number}","notifications_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/labels{/name}","releases_url":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/releases{/id}","created_at":"2015-04-22T03:13:09Z","updated_at":"2015-05-13T09:50:41Z","pushed_at":"2015-09-02T08:43:02Z","git_url":"git://github.com/project-hatohol/HAPI-2.0-Specification.git","ssh_url":"git@github.com:project-hatohol/HAPI-2.0-Specification.git","clone_url":"https://github.com/project-hatohol/HAPI-2.0-Specification.git","svn_url":"https://github.com/project-hatohol/HAPI-2.0-Specification","homepage":null,"size":749,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":3,"forks":1,"open_issues":3,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/73"},"html":{"href":"https://github.com/project-hatohol/HAPI-2.0-Specification/pull/73"},"issue":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/73"},"comments":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/issues/73/comments"},"review_comments":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/73/comments"},"review_comment":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/pulls/73/commits"},"statuses":{"href":"https://api.github.com/repos/project-hatohol/HAPI-2.0-Specification/statuses/a0ebfdef69cabd28c24c253ea04a19df0a5c5ee5"}}}}