A self link shows the exact address (URL) of the current resource in an API response. It helps clients know where to find or refresh the same data.
Self link for current resource in Rest API
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
Rest API
{
"_links": {
"self": {
"href": "URL_of_current_resource"
}
}
}The _links object groups related links.
The self key holds the URL of the current resource under href.
Examples
Rest API
{
"id": 123,
"name": "Book Title",
"_links": {
"self": {
"href": "https://api.example.com/books/123"
}
}
}Rest API
{
"userId": 45,
"username": "johndoe",
"_links": {
"self": {
"href": "https://api.example.com/users/45"
}
}
}Sample Program
This Flask app returns a book resource with a self link showing its own URL. The url_for function builds the full URL dynamically.
Rest API
from flask import Flask, jsonify, url_for app = Flask(__name__) # Sample data books = { 1: {"title": "Learn Python"}, 2: {"title": "REST APIs Made Easy"} } @app.route('/books/<int:book_id>') def get_book(book_id): book = books.get(book_id) if not book: return jsonify({"error": "Book not found"}), 404 # Build self link using url_for self_url = url_for('get_book', book_id=book_id, _external=True) response = { "id": book_id, "title": book["title"], "_links": { "self": {"href": self_url} } } return jsonify(response) if __name__ == '__main__': app.run(debug=True)
Important Notes
Always use absolute URLs (full address) for self links so clients can access them anywhere.
Self links help keep API responses consistent and easy to navigate.
Summary
Self links show the URL of the current resource in API responses.
They help clients find or refresh the same data easily.
Use a _links object with a self key holding the URL.
Practice
1. What is the main purpose of a
self link in a REST API response?easy
Solution
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.Step 2: Differentiate from other links
Other links may point to related resources or metadata, but self specifically means the current resource.Final Answer:
To provide the URL of the current resource for easy access -> Option AQuick 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
Solution
Step 1: Identify the standard key names
The standard way is to use an object named_linkscontaining aselfkey with the URL string.Step 2: Compare options
{"_links": {"self": "https://api.example.com/items/42"}} matches the standard exactly. Others use wrong keys or structure.Final Answer:
{"_links": {"self": "https://api.example.com/items/42"}} -> Option BQuick 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
Solution
Step 1: Locate the self link in the _links object
The self link is under_linkswith keyself, value is the current resource URL.Step 2: Identify the URL value
The value is "https://api.example.com/products/10", which is the URL for this product resource.Final Answer:
https://api.example.com/products/10 -> Option AQuick 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
Solution
Step 1: Identify where self link belongs
The self link must be inside the_linksobject with key exactly "self".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.Final Answer:
Add "self": "https://api.example.com/articles/5" inside the _links object -> Option CQuick 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
Solution
Step 1: Confirm self link key and URL
The self link must be under_linkswith key "self" and URL "https://api.example.com/users/7".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.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.Final Answer:
{ "id": 7, "name": "Alice", "_links": { "self": "https://api.example.com/users/7", "orders": "https://api.example.com/users/7/orders" } } -> Option DQuick 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'
