Configuring IBM Watson Knowledge Catalog API
- Start by setting up your IBM Cloud account to get your IBM Watson Knowledge Catalog service credentials. You'll need your Service URL, API Key, and Catalog ID.
- Install the necessary Python libraries. You'll need `requests` for making HTTP calls to the API and `pandas` if you plan to manipulate data efficiently.
pip install requests pandas
Authentication and Setup
- Obtain an IAM token using your API Key. This is crucial for authenticating your API requests. You can achieve this by making a POST request to the IAM token service.
import requests
def get_iam_token(api_key: str) -> str:
url = "https://iam.cloud.ibm.com/identity/token"
headers = {"Content-Type": "application/x-www-form-urlencoded"}
data = f"grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey={api_key}"
response = requests.post(url, headers=headers, data=data)
response.raise_for_status()
return response.json()["access_token"]
api_key = '<YOUR_API_KEY>'
iam_token = get_iam_token(api_key)
print(iam_token)
Interacting with Catalog API
- After obtaining your token, set up the headers for subsequent requests to the Watson Knowledge Catalog API, which requires the IAM token for authentication.
- To list down assets in your catalog, send a GET request to the specific endpoint. Extract details like asset names and types to work with these assets programmatically.
catalog_id = '<YOUR_CATALOG_ID>'
url = f"https://<YOUR_SERVICE_URL>/v2/catalogs/{catalog_id}/assets"
headers = {
"Authorization": f"Bearer {iam_token}",
"Accept": "application/json"
}
response = requests.get(url, headers=headers)
response.raise_for_status()
assets = response.json()["resources"]
for asset in assets:
print(f"Asset Name: {asset['entity']['name']}, Type: {asset['entity']['asset_type']}")
Adding a New Asset
- Create a new asset in your catalog by crafting a POST request. This request should include necessary details like asset type, name, and other pertinent metadata.
new_asset = {
"metadata": {
"name": "New Dataset",
"description": "A new dataset added for testing",
"asset_type": "data_asset"
},
"entity": {
"data_asset": {
"properties": {
"size": "1024",
"mime_type": "text/csv"
}
}
}
}
response = requests.post(url, headers=headers, json=new_asset)
response.raise_for_status()
print("New Asset Created:", response.json())
Error Handling and Debugging
- Include robust error handling to manage API errors gracefully. Utilize functions like `raise_for_status()` and include status code checks to allow for informative feedback and debugging.
- Log detailed error messages when exceptions occur. This practice aids in diagnosing issues quickly.
try:
response = requests.get(some_url, headers=headers)
response.raise_for_status()
except requests.exceptions.HTTPError as http_err:
print(f"HTTP error occurred: {http_err}")
except Exception as err:
print(f"An error occurred: {err}")
By adhering to these steps, you'll be able to integrate and interact with the IBM Watson Knowledge Catalog API using Python effectively. Adjust headers and request parameters as your project specifications dictate.