{"id":92759,"date":"2019-06-11T07:00:03","date_gmt":"2019-06-11T04:00:03","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=92759"},"modified":"2019-06-10T11:40:45","modified_gmt":"2019-06-10T08:40:45","slug":"defining-resource","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html","title":{"rendered":"Defining a Resource"},"content":{"rendered":"<p>In <a href=\"https:\/\/www.ics.uci.edu\/~fielding\/pubs\/dissertation\/fielding_dissertation.pdf\">Fielding&#8217;s dissertation<\/a>\u00a0a Resource is described as:<\/p>\n<p><i>&#8220;Any information that can be named&#8221; &#8230; &#8220;a document or image, a temporal service (e.g. \u201ctoday\u2019s weather in Los Angeles\u201d), a collection of other resources, a non-virtual object (e.g. a person), and<\/i> <i>so on. In other words, any concept that might be the target of an author\u2019s hypertext<\/i> <i>reference must fit within the definition of a resource. A resource is a conceptual mapping<\/i> <i>to a set of entities, not the entity that corresponds to the mapping at any particular point in<\/i> <i>time.&#8221;<\/i><\/p>\n<p>Defining a Resource is both a <i>Science <\/i>and an <i>Art<\/i>. It requires both Domain knowledge and API Architectural skills.\u00a0 The following points detailed below serve as a checklist which may help you determine your Resource.<\/p>\n<h2 class=\"wp-block-heading\">The Resource must contain a Business Description<\/h2>\n<ul class=\"wp-block-list\">\n<li>The business description should be 3 &#8211; 4 sentences in simple prose which explain what the Resource is.&nbsp;<\/li>\n<li>A developer with a moderate knowledge of&nbsp; your system should be able to understand the description<\/li>\n<li>Any caveats of the Resource should be made clear<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">The Resource should be useful on its own<\/h2>\n<p>This is similar used to the maxim of defining the boundary of a micro-service, where a micro-service should be considered to be useful on its own.&nbsp; Similarly, a Resource should be useful on its own.<\/p>\n<p>For example, instead of:<\/p>\n<div>\n<div id=\"highlighter_83832\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">\/street-address\/{id}<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">RESPONSE<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"street1\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"street2\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>and<\/p>\n<div>\n<div id=\"highlighter_604341\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">\/address-extra\/{id}<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">RESPONSE <\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"city\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"country\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>It should be:<\/p>\n<div>\n<div id=\"highlighter_69748\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">\/address\/{id}<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">RESPONSE<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"street1\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"street2\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"city\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"country\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>If a Resource on its own is not useful and <i>always <\/i>necessitates a subsequent request, it means code will inevitably become more complex and there will be a performance impact incurred from the second request<\/p>\n<h2 class=\"wp-block-heading\">Use an Appropriate Noun<\/h2>\n<p>Use of a simple noun over a compound noun is preferred.\u00a0 For example,<br \/><i>Address <\/i>is better than <i>AddressInfo <\/i>or <i>AddressDetail<\/i>.\u00a0 This is a general rule, there will always be <i>exceptions<\/i>.<\/p>\n<p>If using multiple Resources to represent different views of the same data, for example: <i>Address <\/i>and <i>AddressDetail<\/i>, use the simple noun e.g<br \/><i>Address <\/i>first.\u00a0 Then if the second representation is more detailed use<br \/><i>ResourceNameDetail <\/i>or if it is less detailed use <i>ResourceNameSummary<\/i>.\u00a0 For example, suppose there is a requirement to introduce an Address type Resource:<\/p>\n<ol class=\"wp-block-list\">\n<li><i>Address <\/i>is introduced first<\/li>\n<li>If a subsequent view of Address is needed that is more detailed, the new Resource should be called <i>AddressDetail<\/i><\/li>\n<li>If a subsequent view of Address is needed that is less detailed, the new Resource should be called <i>AddressSummary<\/i><\/li>\n<\/ol>\n<h2 class=\"wp-block-heading\">If it is only used in a READ does it need to be a Resource?<\/h2>\n<p>If a Resource is only ever used in a <i>Read<\/i> request and never a <i>Write\u00a0<\/i>(<i>Create, Partial Update, Full Update, Delete, &#8230;<\/i>) request it is questionable if it needs to be defined as a Resource with its own URI.\u00a0 It could just be added to the parent payload and if there is a concern that payload then becomes too complex, the parent could just provide a sparse query &#8211; where the client can decide per API request what it wants returned.<\/p>\n<h2 class=\"wp-block-heading\">Resources should conform to the uniform interface<\/h2>\n<p>The uniform interface is a very important part of good API design.&nbsp; If creates, reads, updates, deletes etc are done in a consistent way, it means code is more consistent, reusable and more maintainable.<\/p>\n<p>This means:<\/p>\n<div>\n<div id=\"highlighter_112171\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">GET \/addresses\/{id}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>and<\/p>\n<div>\n<div id=\"highlighter_423942\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">GET \/addresses<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>must return the same address data structure to represent an Address.<\/p>\n<div>\n<div id=\"highlighter_553072\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">GET \/addresses\/{id}<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">RESPONSE<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"id\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"546\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"street1\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"street2\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"city\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"country\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>and<\/p>\n<div>\n<div id=\"highlighter_127786\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">GET \/addresses<\/code><\/div>\n<div class=\"line number2 index1 alt1\">&nbsp;<\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">RESPONSE<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"elements\"<\/code><code class=\"java plain\">: [<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"id\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"546\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"street1\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"street2\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"city\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"country\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"String\"<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">},<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">...<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">]<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Similarly, for write payloads, the Data Structure should be the same.&nbsp; So, a partial update to change street1 would be:<\/p>\n<div>\n<div id=\"highlighter_800107\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">POST \/addresses\/{id}\/edit<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">REQUEST<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"street1\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"Walkview\"<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number7 index6 alt2\">&nbsp;<\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java plain\">RESPONSE<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"id\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"546\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"street1\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"Walkview\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"street2\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"Meadowbrook\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"city\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"Dublin\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"country\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"Ireland\"<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>and not something like<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<div>\n<div id=\"highlighter_225076\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">POST \/addresses\/{id}<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">REQUEST<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"newStreet1Value\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"Walkview\"<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>From a Resource perspective, the data structure <b>must<\/b>\u00a0be consistent. A different data structure means a different Resource, it should be named differently and have its own path.<\/p>\n<h2 class=\"wp-block-heading\">Don&#8217;t expose everything<\/h2>\n<p>If your DB model is quite sophisticated, not all attributes need to be exposed at an API level. Some fields may only be persisted for back office processing and never presented on a UI. Such attributes should <b>never <\/b>be included in a JSON API.<\/p>\n<p>When adding an attribute to a JSON Resource, consider:<\/p>\n<ul class=\"wp-block-list\">\n<li>only fields which you are sure the client is interested in should be exposed in the API<\/li>\n<li>if you are not sure, leave the attribute out. It is much lower risk to add an attribute later on, then to remove an attribute that has already been exposed.<\/li>\n<\/ul>\n<h2 class=\"wp-block-heading\">API Models shouldn&#8217;t blindly mirror DB Relational model or OO Models<\/h2>\n<p>In database modelling approaches such as normalizing data or collapsing inheritance hierarchies are used.&nbsp; In Object Orientated design, techniques such as polymorphism, inheritance hierarchies etc are used to promote things like code reuse and to reduce coupling.<\/p>\n<p>Resource modelling does not have to follow theses techniques. The consumer of an API doesn&#8217;t care if the data is all in one table, or normalized over multiple tables.&nbsp; In general, the API returns data in a format that is easy to use and does not require much additional mapping by the client before it can become useful.<\/p>\n<h2 class=\"wp-block-heading\">Use Hierarchical data to Avoid repetition<\/h2>\n<p>One of the advantages of hierarchical data over flat formats such as CSV is that it provides a mechanism to avoid repetition.&nbsp; For example, consider a data structures which contains a list of persons and what team they are in.&nbsp; In CSV this is:<\/p>\n<div>\n<div id=\"highlighter_461152\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">team, firstname, lastname<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">Liverpool, Mo, Salah<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">Liverpool, Andy, Roberston<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>In JSON this could be:<\/p>\n<div>\n<div id=\"highlighter_376018\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"team\"<\/code><code class=\"java plain\">: <\/code><code class=\"java string\">\"Liverpool\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"players\"<\/code><code class=\"java plain\">: [<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"firstName\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"Mo\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"lastName\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"Salah\"<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">},<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"firstName\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"Andy\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"lastName\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"Roberston\"<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">},<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">...<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">]<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">Use Hierarchical Data to Make context clear<\/h2>\n<p>Another advantage of hierarchical data is that it helps provide context. To understand a flat data structure you need to know what the query was that generated the data structure to understand the meaning of it.&nbsp; For example, consider a bunch of rows that contain a date range.<\/p>\n<div>\n<div id=\"highlighter_490441\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">name, fromDate, toDate, holidays<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>You could make assumptions that there is a new row when there is a change in Tony being on holidays.\u00a0 But what if there is another column<\/p>\n<div>\n<div id=\"highlighter_720431\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">name, fromDate, toDate, holidays, sick,<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Are the date ranges corresponding to holidays, sickness or both?<\/p>\n<p>If we get more data back maybe it might be clearer&#8230;<\/p>\n<div>\n<div id=\"highlighter_448673\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">name, fromDate, toDate, holidays, sick,<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">04<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Now it looks like it&#8217;s sickness that the date range corresponds to and its only a coincidence this lines up a one holiday period. However, when we get more data back this theory fails:<\/p>\n<div>\n<div id=\"highlighter_67135\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">name, fromDate, toDate, holidays, sick,<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">04<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">04<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">05<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The problem with flat data structures is that can only go so far in making thee data self describing. It gets even more complicated when just don&#8217;t have some information.&nbsp; For example:<\/p>\n<div>\n<div id=\"highlighter_539268\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1<\/div>\n<div class=\"line number2 index1 alt1\">2<\/div>\n<div class=\"line number3 index2 alt2\">3<\/div>\n<div class=\"line number4 index3 alt1\">4<\/div>\n<div class=\"line number5 index4 alt2\">5<\/div>\n<div class=\"line number6 index5 alt1\">6<\/div>\n<div class=\"line number7 index6 alt2\">7<\/div>\n<div class=\"line number8 index7 alt1\">8<\/div>\n<div class=\"line number9 index8 alt2\">9<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">name, fromDate, toDate, holidays, sick,<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">03<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">04<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">04<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">05<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">05<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">06<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">null<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">06<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">07<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">01<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">null<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">07<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">02<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">07<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">08<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">false<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java plain\">Tony, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">07<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">08<\/code><code class=\"java plain\">, <\/code><code class=\"java value\">2018<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">07<\/code><code class=\"java plain\">-<\/code><code class=\"java value\">09<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">true<\/code><code class=\"java plain\">, <\/code><code class=\"java keyword\">null<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>It is inevitable processing this data will be buggy. We could represent the same data in hierarchical format as:<\/p>\n<div>\n<div id=\"highlighter_355402\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<div class=\"line number20 index19 alt1\">20<\/div>\n<div class=\"line number21 index20 alt2\">21<\/div>\n<div class=\"line number22 index21 alt1\">22<\/div>\n<div class=\"line number23 index22 alt2\">23<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"name\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"tony\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"holidays\"<\/code><code class=\"java plain\">: [<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"fromDate\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"2018-01-01\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"toDate\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"2018-02-02\"<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">},<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"fromDate\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"2018-04-02\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"toDate\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"2018-05-01\"<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}, <\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"fromDate\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"2018-07-02\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"toDate\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"2018-07-09\"<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">],<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"sick\"<\/code><code class=\"java plain\">: [ <\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"fromDate\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"2018-02-03\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number20 index19 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"toDate\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"2018-03-01\"<\/code><\/div>\n<div class=\"line number21 index20 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number22 index21 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">]<\/code><\/div>\n<div class=\"line number23 index22 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Now, the data is much more self describing. It is clear when a date range is for a holiday and when it is for a sick period.<\/p>\n<h2 class=\"wp-block-heading\">Resource Relationships<\/h2>\n<p>Resources on their own only describe themselves. A Resource model describes relationships between Resources.&nbsp; This will give an indication of:<\/p>\n<ul class=\"wp-block-list\">\n<li>dependencies between Resources. What Resources are needed for a particular Resource to exist or what is impacted when a particular Resource changes: updated or deleted.<\/li>\n<li>Data navigation &#8211; in a large domain model, it is much easier to understand and follow if navigational and directional sense is provided to consumers of the model.&nbsp; Especially when to navigation across (Resources loosely connected) can be be differentiated from navigation down (Resources strongly connected)<\/li>\n<\/ul>\n<p>Resources should not only consider hypermedia links to achieve HATEOAS; when Resources describe what they are linked to using hypermedia links, it is a very powerful mechanism to express the Resource model. Advantages include:<\/p>\n<ul class=\"wp-block-list\">\n<li>It splits a large domain model into more manageable pieces.&nbsp; Typically users are only interested in a particular part of the model.&nbsp; When Resources self describe their own relationships, it means a large complex model is split up into more digestible chunks and users get the information they need quicker.&nbsp;<\/li>\n<li>The Resource model is self describing and kept in sync with code. Everything is co-located.<\/li>\n<\/ul>\n<p><b>Make clear Parent &#8211; Child relationships<\/b><\/p>\n<p>A Child self describes a Parent thru URL hierarchical name spacing. A Parent Resource has children of one or many types should make this clear by providing links to the children.&nbsp; For example, if a Team has a Players.&nbsp; The Team payload should make this clear.<\/p>\n<div>\n<div id=\"highlighter_198047\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">REQUEST<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">https:<\/code><code class=\"java comments\">\/\/api.server.com\/teams\/4676<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"java plain\">RESPONSE<\/code><\/div>\n<div class=\"line number4 index3 alt1\">&nbsp;<\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"id\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"34533\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">...,<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"_links\"<\/code><code class=\"java plain\">: {<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"self\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"<a href=\"https:\/\/api.server.com\/teams\/4676\">https:\/\/api.server.com\/teams\/4676<\/a>\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"players\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"<a href=\"https:\/\/api.server.com\/teams\/4676\/players\">https:\/\/api.server.com\/teams\/4676\/players<\/a>\"<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">Make clear Peer relationships<\/h2>\n<p>This is similar to above except it is for Resources that exist in a different hierarchical name space. So for example, suppose the team is in division 1.&nbsp; A link should be included in the team&#8217;s division attribute.<\/p>\n<div>\n<div id=\"highlighter_672345\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">REQUEST<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">https:<\/code><code class=\"java comments\">\/\/api.server.com\/teams\/4676<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">RESPONSE<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"id\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"34533\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"division\"<\/code><code class=\"java plain\">: {<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"name\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"Division 1\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"_links\"<\/code><code class=\"java plain\">: {<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"self\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"<a href=\"https:\/\/api.server.com\/divisions\/1\">https:\/\/api.server.com\/divisions\/1<\/a>\"<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">},<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">..., <\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"_links\"<\/code><code class=\"java plain\">: {<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"self\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"<a href=\"https:\/\/api.server.com\/teams\/4676\">https:\/\/api.server.com\/teams\/4676<\/a>\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"players\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"<a href=\"https:\/\/api.server.com\/teams\/4676\/players\">https:\/\/api.server.com\/teams\/4676\/players<\/a>\"<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2 class=\"wp-block-heading\">Make clear Links to Other Representations<\/h2>\n<p>If data is modeled to have multiple Resources which represent different representations of the data, the Resources should also include links to each other.<\/p>\n<div>\n<div id=\"highlighter_311040\" class=\"syntaxhighlighter  java\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">01<\/div>\n<div class=\"line number2 index1 alt1\">02<\/div>\n<div class=\"line number3 index2 alt2\">03<\/div>\n<div class=\"line number4 index3 alt1\">04<\/div>\n<div class=\"line number5 index4 alt2\">05<\/div>\n<div class=\"line number6 index5 alt1\">06<\/div>\n<div class=\"line number7 index6 alt2\">07<\/div>\n<div class=\"line number8 index7 alt1\">08<\/div>\n<div class=\"line number9 index8 alt2\">09<\/div>\n<div class=\"line number10 index9 alt1\">10<\/div>\n<div class=\"line number11 index10 alt2\">11<\/div>\n<div class=\"line number12 index11 alt1\">12<\/div>\n<div class=\"line number13 index12 alt2\">13<\/div>\n<div class=\"line number14 index13 alt1\">14<\/div>\n<div class=\"line number15 index14 alt2\">15<\/div>\n<div class=\"line number16 index15 alt1\">16<\/div>\n<div class=\"line number17 index16 alt2\">17<\/div>\n<div class=\"line number18 index17 alt1\">18<\/div>\n<div class=\"line number19 index18 alt2\">19<\/div>\n<\/td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"java plain\">REQUEST<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"java plain\">https:<\/code><code class=\"java comments\">\/\/api.server.com\/teams\/4676<\/code><\/div>\n<div class=\"line number3 index2 alt2\">&nbsp;<\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"java plain\">RESPONSE<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"java plain\">{<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"id\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"34533\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"division\"<\/code><code class=\"java plain\">: {<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"name\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"Division 1\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"_links\"<\/code><code class=\"java plain\">: {<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"self\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"<a href=\"https:\/\/api.server.com\/divisions\/1\">https:\/\/api.server.com\/divisions\/1<\/a>\"<\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">},<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">..., <\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"_links\"<\/code><code class=\"java plain\">: {<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"self\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"<a href=\"https:\/\/api.server.com\/teams\/4676\">https:\/\/api.server.com\/teams\/4676<\/a>\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"players\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"<a href=\"https:\/\/api.server.com\/teams\/4676\/players\">https:\/\/api.server.com\/teams\/4676\/players<\/a>\"<\/code><code class=\"java plain\">,<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java string\">\"teamDetails\"<\/code><code class=\"java plain\">:<\/code><code class=\"java string\">\"<a href=\"https:\/\/api.server.com\/teamDetails\/4676\">https:\/\/api.server.com\/teamDetails\/4676<\/a>\"<\/code><\/div>\n<div class=\"line number18 index17 alt1\"><code class=\"java spaces\">&nbsp;&nbsp;&nbsp;&nbsp;<\/code><code class=\"java plain\">}<\/code><\/div>\n<div class=\"line number19 index18 alt2\"><code class=\"java plain\">}<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td>\n<p>Published on Java Code Geeks with permission by Alex Staveley, partner at our <a href=\"\/\/www.javacodegeeks.com\/join-us\/jcg\/\" target=\"_blank\" rel=\"noopener noreferrer\">JCG program<\/a>. See the original article here: <a href=\"http:\/\/dublintech.blogspot.com\/2019\/06\/defining-resource.html\" target=\"_blank\" rel=\"noopener noreferrer\">Defining a Resource<\/a><\/p>\n<p>Opinions expressed by Java Code Geeks contributors are their own.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In Fielding&#8217;s dissertation\u00a0a Resource is described as: &#8220;Any information that can be named&#8221; &#8230; &#8220;a document or image, a temporal service (e.g. \u201ctoday\u2019s weather in Los Angeles\u201d), a collection of other resources, a non-virtual object (e.g. a person), and so on. In other words, any concept that might be the target of an author\u2019s hypertext &hellip;<\/p>\n","protected":false},"author":78,"featured_media":112,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[815],"class_list":["post-92759","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-rest"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Defining a Resource - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Interested to learn about Defining a Resource? Check our article explaining how Defining a Resource is both a Science and an Art.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Defining a Resource - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Interested to learn about Defining a Resource? Check our article explaining how Defining a Resource is both a Science and an Art.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-11T04:00:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Alex Staveley\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/dublintech\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alex Staveley\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html\"},\"author\":{\"name\":\"Alex Staveley\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/c36bb99e6c62bd244448ff5b88a5dbb0\"},\"headline\":\"Defining a Resource\",\"datePublished\":\"2019-06-11T04:00:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html\"},\"wordCount\":1466,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"keywords\":[\"REST\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html\",\"name\":\"Defining a Resource - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"datePublished\":\"2019-06-11T04:00:03+00:00\",\"description\":\"Interested to learn about Defining a Resource? Check our article explaining how Defining a Resource is both a Science and an Art.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2012\\\/10\\\/enterprise-java-logo.jpg\",\"width\":150,\"height\":150,\"caption\":\"java-interview-questions-answers\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2019\\\/06\\\/defining-resource.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Defining a Resource\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/c36bb99e6c62bd244448ff5b88a5dbb0\",\"name\":\"Alex Staveley\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c203a6c5693c1d76090c0b37893b409d89a4285f1fee2a545f80068d27a79cd7?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c203a6c5693c1d76090c0b37893b409d89a4285f1fee2a545f80068d27a79cd7?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c203a6c5693c1d76090c0b37893b409d89a4285f1fee2a545f80068d27a79cd7?s=96&d=mm&r=g\",\"caption\":\"Alex Staveley\"},\"sameAs\":[\"http:\\\/\\\/www.dublintech.blogspot.com\\\/\",\"http:\\\/\\\/www.linkedin.com\\\/pub\\\/alex-staveley\\\/14\\\/977\\\/4a8\",\"https:\\\/\\\/x.com\\\/http:\\\/\\\/twitter.com\\\/dublintech\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/Alex-Staveley\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Defining a Resource - Java Code Geeks","description":"Interested to learn about Defining a Resource? Check our article explaining how Defining a Resource is both a Science and an Art.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html","og_locale":"en_US","og_type":"article","og_title":"Defining a Resource - Java Code Geeks","og_description":"Interested to learn about Defining a Resource? Check our article explaining how Defining a Resource is both a Science and an Art.","og_url":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2019-06-11T04:00:03+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","type":"image\/jpeg"}],"author":"Alex Staveley","twitter_card":"summary_large_image","twitter_creator":"@http:\/\/twitter.com\/dublintech","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Alex Staveley","Est. reading time":"13 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html"},"author":{"name":"Alex Staveley","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/c36bb99e6c62bd244448ff5b88a5dbb0"},"headline":"Defining a Resource","datePublished":"2019-06-11T04:00:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html"},"wordCount":1466,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","keywords":["REST"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html","url":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html","name":"Defining a Resource - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","datePublished":"2019-06-11T04:00:03+00:00","description":"Interested to learn about Defining a Resource? Check our article explaining how Defining a Resource is both a Science and an Art.","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2012\/10\/enterprise-java-logo.jpg","width":150,"height":150,"caption":"java-interview-questions-answers"},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2019\/06\/defining-resource.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Defining a Resource"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/c36bb99e6c62bd244448ff5b88a5dbb0","name":"Alex Staveley","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c203a6c5693c1d76090c0b37893b409d89a4285f1fee2a545f80068d27a79cd7?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c203a6c5693c1d76090c0b37893b409d89a4285f1fee2a545f80068d27a79cd7?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c203a6c5693c1d76090c0b37893b409d89a4285f1fee2a545f80068d27a79cd7?s=96&d=mm&r=g","caption":"Alex Staveley"},"sameAs":["http:\/\/www.dublintech.blogspot.com\/","http:\/\/www.linkedin.com\/pub\/alex-staveley\/14\/977\/4a8","https:\/\/x.com\/http:\/\/twitter.com\/dublintech"],"url":"https:\/\/www.javacodegeeks.com\/author\/Alex-Staveley"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/92759","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=92759"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/92759\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/112"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=92759"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=92759"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=92759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}