Bird
Raised Fist0
Rest APIprogramming~20 mins

Self link for current resource in Rest API - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
REST API Self Link Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this REST API self link generation code?
Given the following Python Flask code snippet that generates a self link for a resource, what is the output when accessing the endpoint /items/42?
Rest API
from flask import Flask, url_for, jsonify, request
app = Flask(__name__)

@app.route('/items/<int:item_id>')
def get_item(item_id):
    self_url = url_for('get_item', item_id=item_id, _external=True)
    return jsonify({'id': item_id, 'self': self_url})

with app.test_request_context():
    print(url_for('get_item', item_id=42, _external=True))
A"http://localhost/items/42"
B"/items/42"
C"http://localhost/items?id=42"
D"http://localhost/items/"
Attempts:
2 left
💡 Hint
Look at the _external=True parameter in url_for to understand the full URL generation.
🧠 Conceptual
intermediate
1:30remaining
Which HTTP header is commonly used to indicate the self link of a resource in REST APIs?
In REST API design, which HTTP header is typically used to provide the URL of the current resource (self link) in the response headers?
AContent-Location
BLocation
CLink
DSelf
Attempts:
2 left
💡 Hint
Think about headers that can contain multiple URLs with relation types.
🔧 Debug
advanced
2:30remaining
Why does this code fail to generate a correct self link?
Consider this Node.js Express code snippet intended to add a self link to a JSON response. Why does it fail to produce the correct full URL for the self link?
Rest API
app.get('/users/:id', (req, res) => {
  const selfLink = `${req.protocol}://${req.hostname}/users/${req.params.id}`;
  res.json({ id: req.params.id, self: selfLink });
});
Areq.protocol is undefined in Express, causing an error
BThe template string syntax is incorrect
Creq.params.id is not accessible in this route
Dreq.hostname does not include the port, so the URL may be incomplete
Attempts:
2 left
💡 Hint
Check how Express provides host and port information in requests.
📝 Syntax
advanced
2:00remaining
Which option correctly adds a self link in a JSON response in Java Spring Boot?
Given a Spring Boot controller method, which code snippet correctly adds a self link to the returned resource using Spring HATEOAS?
Rest API
@GetMapping("/books/{id}")
public EntityModel<Book> getBook(@PathVariable Long id) {
    Book book = bookRepository.findById(id).orElseThrow();
    // Add self link here
}
Areturn EntityModel.of(book, linkTo(methodOn(BookController.class).getBook(id)).withSelfRel());
Breturn new EntityModel<>(book, new Link("/books/" + id));
Creturn ResponseEntity.ok(book).header("self", "/books/" + id).build();
Dreturn book.add(linkTo(BookController.class).slash(id).withSelfRel());
Attempts:
2 left
💡 Hint
Look for the standard way to create self links with Spring HATEOAS using methodOn and linkTo.
🚀 Application
expert
1:30remaining
How many items are in the resulting JSON when adding a self link to a nested resource?
Consider this JSON response for a REST API resource with a nested subresource and self links added at both levels: { "id": 10, "name": "Folder", "self": "http://api.example.com/folders/10", "files": [ { "id": 5, "filename": "doc.txt", "self": "http://api.example.com/folders/10/files/5" } ] } How many total keys are at the top level of the JSON object?
A3
B4
C5
D6
Attempts:
2 left
💡 Hint
Count the keys directly inside the outermost curly braces.

Practice

(1/5)
1. What is the main purpose of a self link in a REST API response?
easy
A. To provide the URL of the current resource for easy access
B. To link to a related but different resource
C. To show the API version used
D. To list all available endpoints in the API

Solution

  1. Step 1: Understand the role of self link

    The self link points to the current resource's URL, allowing clients to access or refresh it easily.
  2. Step 2: Differentiate from other links

    Other links may point to related resources or metadata, but self specifically means the current resource.
  3. Final Answer:

    To provide the URL of the current resource for easy access -> Option A
  4. Quick Check:

    Self link = current resource URL [OK]
Hint: Self link always points to the current resource URL [OK]
Common Mistakes:
  • Confusing self link with related resource links
  • Thinking self link shows API version
  • Assuming self link lists all endpoints
2. Which of the following is the correct JSON structure to include a self link for a resource with URL https://api.example.com/items/42?
easy
A. {"links": {"self_link": "https://api.example.com/items/42"}}
B. {"_links": {"self": "https://api.example.com/items/42"}}
C. {"_links": {"current": "https://api.example.com/items/42"}}
D. {"self": "https://api.example.com/items/42"}

Solution

  1. Step 1: Identify the standard key names

    The standard way is to use an object named _links containing a self key with the URL string.
  2. Step 2: Compare options

    {"_links": {"self": "https://api.example.com/items/42"}} matches the standard exactly. Others use wrong keys or structure.
  3. Final Answer:

    {"_links": {"self": "https://api.example.com/items/42"}} -> Option B
  4. Quick Check:

    Use _links with self key for self link [OK]
Hint: Use _links object with self key for self link [OK]
Common Mistakes:
  • Using 'links' instead of '_links'
  • Using 'self_link' or 'current' instead of 'self'
  • Placing self URL outside _links object
3. Given this API response snippet, what is the URL to access the current resource?
{
  "id": 10,
  "name": "Book",
  "_links": {
    "self": "https://api.example.com/products/10",
    "category": "https://api.example.com/categories/5"
  }
}
medium
A. https://api.example.com/products/10
B. https://api.example.com/products
C. https://api.example.com/categories/5
D. https://api.example.com/

Solution

  1. Step 1: Locate the self link in the _links object

    The self link is under _links with key self, value is the current resource URL.
  2. Step 2: Identify the URL value

    The value is "https://api.example.com/products/10", which is the URL for this product resource.
  3. Final Answer:

    https://api.example.com/products/10 -> Option A
  4. Quick Check:

    Self link URL = https://api.example.com/products/10 [OK]
Hint: Find _links.self for current resource URL [OK]
Common Mistakes:
  • Choosing related links like category URL
  • Picking base API URL instead of self
  • Ignoring the _links object structure
4. You receive this JSON response but the self link is missing:
{
  "id": 5,
  "title": "Article",
  "_links": {
    "related": "https://api.example.com/articles/related"
  }
}
What is the best fix to add a self link for the current resource at https://api.example.com/articles/5?
medium
A. Add "self": "https://api.example.com/articles/5" at the root level
B. Add "self_link": "https://api.example.com/articles/5" inside the _links object
C. Add "self": "https://api.example.com/articles/5" inside the _links object
D. Add "link": "https://api.example.com/articles/5" inside the _links object

Solution

  1. Step 1: Identify where self link belongs

    The self link must be inside the _links object with key exactly "self".
  2. Step 2: Choose correct key and location

    Add "self": "https://api.example.com/articles/5" inside the _links object adds the correct key "self" with the URL inside _links. Other options use wrong keys or wrong placement.
  3. Final Answer:

    Add "self": "https://api.example.com/articles/5" inside the _links object -> Option C
  4. Quick Check:

    Self link key = "self" inside _links [OK]
Hint: Self link must be 'self' key inside _links object [OK]
Common Mistakes:
  • Using wrong key names like self_link or link
  • Placing self link outside _links object
  • Omitting the self link entirely
5. You want to design a REST API response for a user resource with ID 7. Which JSON snippet correctly includes a self link and a related link to the user's orders at https://api.example.com/users/7/orders?
hard
A. { "id": 7, "name": "Alice", "_links": { "self": "https://api.example.com/users/7", "related": "https://api.example.com/users/7/orders" } }
B. { "id": 7, "name": "Alice", "links": { "self": "https://api.example.com/users/7", "orders": "https://api.example.com/users/7/orders" } }
C. { "id": 7, "name": "Alice", "_links": { "self_link": "https://api.example.com/users/7", "orders_link": "https://api.example.com/users/7/orders" } }
D. { "id": 7, "name": "Alice", "_links": { "self": "https://api.example.com/users/7", "orders": "https://api.example.com/users/7/orders" } }

Solution

  1. Step 1: Confirm self link key and URL

    The self link must be under _links with key "self" and URL "https://api.example.com/users/7".
  2. Step 2: Choose appropriate key for related orders link

    Using "orders" for the orders link is a standard practice to indicate the related resource. { "id": 7, "name": "Alice", "_links": { "self": "https://api.example.com/users/7", "orders": "https://api.example.com/users/7/orders" } } uses "orders" correctly.
  3. Step 3: Check other options for correctness

    { "id": 7, "name": "Alice", "_links": { "self": "https://api.example.com/users/7", "orders": "https://api.example.com/users/7/orders" } } uses "orders" key which is standard. { "id": 7, "name": "Alice", "links": { "self": "https://api.example.com/users/7", "orders": "https://api.example.com/users/7/orders" } } uses "links" instead of "_links". { "id": 7, "name": "Alice", "_links": { "self_link": "https://api.example.com/users/7", "orders_link": "https://api.example.com/users/7/orders" } } uses non-standard keys "self_link" and "orders_link". The option with "related": "https://api.example.com/users/7/orders" uses a generic rel name which is less descriptive for the specific orders resource.
  4. Final Answer:

    { "id": 7, "name": "Alice", "_links": { "self": "https://api.example.com/users/7", "orders": "https://api.example.com/users/7/orders" } } -> Option D
  5. Quick Check:

    Use _links with self and orders keys for current and orders URLs [OK]
Hint: Use _links with self and orders keys for current and orders URLs [OK]
Common Mistakes:
  • Using 'links' instead of '_links'
  • Using non-standard keys like self_link
  • Using generic 'related' instead of specific 'orders'