درس ۹ از ۳۳

دسترسی به resources (Accessing resources)

عنوان اصلی: Accessing resources

هدف یادگیری: مصرف resources از سمت client: list، read، subscribe برای updateها.

مفاهیم کلیدی: resources/list، resources/read، resources/subscribe، notifications/resources/updated، notifications/resources/list_changed، pagination.

از سمت client، دسترسی به resources متقارن با دسترسی به tools است. list_resources() را برای enumerate صدا بزنید، read_resource(uri) برای fetch محتوا، subscribe_resource(uri) برای دریافت notification وقتی یک resource خاص تغییر می‌کند. هم list-changed و هم per-resource updated باید توسط client سیم‌کشی شوند اگر host به‌روزرسانی زنده می‌خواهد.

Subscriptionها اختیاری هستند — server فقط در صورتی پشتیبانی می‌کند که در init مقدار resources.subscribe: true را اعلام کرده باشد. اگر نکرده باشد، صدا زدن resources/subscribe یک خطای JSON-RPC برمی‌گرداند.

مثال عملی — Python client

from pydantic import AnyUrl

resources = await session.list_resources()
for r in resources.resources:
    print(r.uri, r.name, r.mimeType)

content = await session.read_resource(AnyUrl("file://documents/readme.md"))
for c in content.contents:
    print(c.uri, "->", c.text if hasattr(c, "text") else "[binary]")

# Subscribe for change notifications
await session.subscribe_resource(AnyUrl("file://documents/readme.md"))
# session will dispatch notifications/resources/updated to your handler

مثال عملی — notification خام روی wire

{ "jsonrpc": "2.0", "method": "notifications/resources/updated",
  "params": { "uri": "file:///project/src/main.rs" } }

اشتباهات رایج

  • subscribe بدون چک کردن capability — server ممکن است پشتیبانی نکند.
  • paginate نکردن resources/list — serverهای بزرگ با nextCursor پاسخ می‌دهند و client باید loop کند.
  • فراموش کردن unsubscribe وقتی host view resource را می‌بندد.