Data Element | Modern Web Examples |
---|---|
resource | the intended conceptual target of a hypertext reference |
resource identifier | URL, URN |
representation | HTML document, JPEG image |
representation metadata | media type, last-modified time |
resource metadata | source link, alternates, vary |
control data | if-modified-since, cache-control |
stands for representational
Average submission time:
How often user updates app?
Exercise: What does it take to call simultaneously several URLs and join results?
def result = ""
def threads = (1..3).collect {
Thread.start {result += new URL("https://google.com").text}
}
threads*.join()
println result
{
"users" : [
{
"id": 1234,
"name": "Bob",
"roles": [
{"href": "http://api.example.com/roles/1"},
{"href": "http://api.example.com/roles/2"},
{"href": "http://api.example.com/roles/3"}
],
}
]
}
{
"users" : [
{
"id": 1234,
"name": "Bob",
"roles": [
{"name": "ADMIN"},
{"name": "OPERATOR"},
{"name": "USER"}
],
}
]
}
{
"appKey": null,
"applicationFeatures": [
"TM_HTML_COMPLETE",
"ACCESS_SPUTNIK_IM_APPLICATION",
"APPHANCE_INTEGRATION",
"TM_TOP_TESTERS",
"VOLTRON_DASHBOARD"
],
"authDate": 1396788850862,
"chatUUID": "1234567890",
"code": "4c4712a4141d261ec0ca8f90379506854c4712a4141d261ec0ca8f90379506854c4712a4141d261ec0ca8f90379506854c4712a4141d261ec0ca8f9037950685",
"grantedAuthorities": [
"PERMISSION_BUG_PAYOUT_VIEW",
"PERMISSION_PROJECT_VIEW",
"PERMISSION_TESTER_PAYMENTS_VIEW",
"PERMISSION_USER_ACCOUNT_VIEW",
"PERMISSION_REVIEW_PAYOUT_VIEW",
"PERMISSION_TEST_CYCLE_VIEW",
"PERMISSION_USER_ACCOUNT_CLOSE",
"PERMISSION_USER_ACCOUNT_EDIT",
"PERMISSION_BUGS_AND_TEST_CASES_VIEW",
"PERMISSION_BUG_EDIT",
"PERMISSION_TEST_CYCLE_REVIEW_READ",
"PERMISSION_PRODUCT_VIEW",
"PERMISSION_BUG_CLIPBOARD_COPY",
"PERMISSION_REQUESTED_INFO_SEND",
"PERMISSION_TEST_RUN_TEST_CASE_SELF_ASSIGN",
"PERMISSION_BUG_DISCARD",
"PERMISSION_BUG_DISPUTE",
"PERMISSION_USABILITY_SURVEY_RESPONSE_VIEW",
"PERMISSION_USABILITY_SURVEY_RESPONSE_DISCARD",
"PERMISSION_USABILITY_SURVEY_RESPONSE_EDIT",
"PERMISSION_USABILITY_SURVEY_RESPONSE_CREATE",
"PERMISSION_TEST_CYCLE_COVERAGE_VIEW",
"PERMISSION_TEST_RUN_ASSIGNMENT_EXECUTE",
"PERMISSION_TEST_CYCLE_PRODUCT_DESCRIPTION_VIEW",
"PERMISSION_TEST_CYCLE_OBJECTIVES_VIEW",
"PERMISSION_BUG_CREATE",
"PERMISSION_TEST_CASE_TAB_VIEW",
"PERMISSION_TEST_CYCLE_REVIEW_CREATE",
"PERMISSION_TEST_RUN_RESULT_ATTACHMENT_UPLOAD",
"PERMISSION_USABILITY_SURVEY_RESPONSE_PAYOUT_EDIT",
"PERMISSION_BUG_FIX_WORTHINESS_PRICE_VIEW",
"PERMISSION_TEST_CYCLE_REVIEW_EDIT",
"PERMISSION_USABILITY_SURVEY_RESPONSE_PAYOUT_VIEW",
"PERMISSION_TEST_CYCLE_REVIEW_DISCARD",
"PERMISSION_TEST_CASE_PAYOUT_VIEW",
"PERMISSION_TEST_CYCLE_REVIEW_MESSAGE_CREATE",
"DATA_GRID_TESTER_VIEW",
"PERMISSION_USABILITY_SURVEY_PAYOUT_VIEW"
],
"impsersonatedUserId": null,
"ipAddress": "127.0.0.1",
"roles": [
3
],
"token": "43v4j3gv4jh3n23z896b2c32xbfekszb3",
"userId": 1234,
"userName": "frank@sinatra.com"
}
XML | JSON |
5234 bytes | 1934 bytes (37%) |
JSON | JSON subset |
1934 bytes | 88 bytes (4.5%) |
JSON subset | JSON subset + GZIP |
88 bytes | 101 bytes (115%) |
Overall: 1,9% of initial size!
http://api.example.com/v1
application/vnd.example.com.v1+json
http://v1.api.example.com
Reduced: