Dev tools 허브 API

발행: (2025년 12월 15일 오전 01:46 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

내가 만든 것

Xano AI‑Powered Backend Challenge 제출물: Production‑Ready Public API

제목: DevTools Resource Hub API
사용 가능: True

DevTools API

  • Xano Hub API
  • Xano Assisted Production API

소프트웨어 백엔드 아키텍처

Architecture Diagram 1

백엔드는 MVP에 적합한 계층형·모듈식 설계를 따릅니다. API 엔드포인트는 REST 인터페이스를 제공하며 인증, 속도 제한, 검증으로 보호됩니다. 핵심 비즈니스 로직은 검색, 추천, 스코어링과 같은 서비스로 분리됩니다. 데이터 접근 계층은 PostgreSQL에 대한 쿼리, 캐싱, 트랜잭션을 담당합니다. 이벤트 처리와 백그라운드 작업을 통해 확장 가능한 비동기 통합을 구현합니다.

Architecture Diagram 2

Architecture Diagram 3

Architecture Diagram 4

캐싱 전략 개요

Caching Strategy

데이터베이스 스키마

tools

ColumnTypeConstraints / Description
idSERIALPrimary Key
nameVARCHAR(255)Unique, Not Null
slugVARCHAR(255)Unique, URL‑safe
category_idINTEGERFK → categories.id
descriptionTEXTTool description
taglineVARCHAR(500)Short marketing line
website_urlVARCHAR(500)Official website
logo_urlVARCHAR(500)Logo image URL
founded_dateDATECompany founding date
company_nameVARCHAR(255)Company behind the tool
is_activeBOOLEANDefault: true
query_countINTEGERDefault: 0 (trending score)
last_queried_atTIMESTAMPLast API query time
created_atTIMESTAMPDefault: now()
updated_atTIMESTAMPDefault: now()

Indexes

  • category_id
  • slug
  • is_active
  • (query_count, last_queried_at)

categories

ColumnTypeConstraints / Description
idSERIALPrimary Key
nameVARCHAR(255)Unique, Not Null
slugVARCHAR(255)Unique
parent_idINTEGERSelf FK → categories.id
descriptionTEXTCategory description
iconVARCHAR(100)Icon identifier
display_orderINTEGERDefault: 0
created_atTIMESTAMPCreated timestamp

Indexes

  • parent_id
  • slug

pricing_tiers

ColumnTypeConstraints / Description
idSERIALPrimary Key
tool_idINTEGERFK → tools.id (CASCADE)
tier_nameVARCHAR(100)Free, Starter, Pro
monthly_priceDECIMAL(10,2)Nullable
annual_priceDECIMAL(10,2)Nullable
currencyVARCHAR(3)Default: USD
billing_cycleENUMmonthly, annual, one-time
features_jsonJSONBFlexible features list
limits_jsonJSONBAPI limits, users, storage
is_currentBOOLEANDefault: true
effective_fromTIMESTAMPPricing start
effective_toTIMESTAMPNullable
created_atTIMESTAMPCreated timestamp

Indexes

  • (tool_id, is_current)
  • (effective_from, effective_to)

alternatives

ColumnTypeConstraints / Description
idSERIALPrimary Key
tool_idINTEGERFK → tools.id
alternative_idINTEGERFK → tools.id
similarity_scoreDECIMAL(5,2)Range: 0–100
match_basisENUMfeatures, pricing, category
comparison_notesTEXTComparison details
upvotesINTEGERDefault: 0
created_atTIMESTAMPCreated timestamp
updated_atTIMESTAMPUpdated timestamp

Constraints

  • UNIQUE(tool_id, alternative_id)
  • tool_id <> alternative_id

Indexes

  • tool_id
  • similarity_score DESC

reviews_aggregate

ColumnTypeConstraints / Description
idSERIALPrimary Key
tool_idINTEGERFK → tools.id
sourceVARCHAR(50)g2, capterra, producthunt
avg_ratingDECIMAL(3,2)Range: 0–5
total_reviewsINTEGERReview count
rating_breakdownJSONBe.g. {5:120,4:45,...}
source_urlVARCHAR(500)Review page URL
last_scraped_atTIMESTAMPScraping time
created_atTIMESTAMPCreated timestamp

Indexes

  • (tool_id, source)
  • avg_rating DESC

features

ColumnTypeConstraints / Description
idSERIALPrimary Key
tool_idINTEGERFK → tools.id
feature_nameVARCHAR(255)Feature title
feature_categoryVARCHAR(100)Auth, API, Database
is_availableBOOLEANDefault: true
tier_availabilityVARCHAR(50)free, pro, all
descriptionTEXTFeature details
created_atTIMESTAMPCreated timestamp

Indexes

  • tool_id
  • feature_category
  • is_available

changelog

ColumnTypeConstraints / Description
idSERIALPrimary Key
tool_idINTEGERFK → tools.id
change_typeENUMpricing, feature, update
change_summaryVARCHAR(500)Short summary
change_detailsTEXTDetailed change
old_valueJSONBPrevious value
new_valueJSONBUpdated value
changed_atTIMESTAMPWhen change occurred
created_atTIMESTAMPCreated timestamp

Indexes

  • (tool_id, changed_at DESC)
  • change_type

integrations

ColumnTypeConstraints / Description
idSERIALPrimary Key
tool_idINTEGERFK → tools.id
integrates_withINTEGERFK → tools.id
integration_typeENUMnative, api, webhook, zapier
ease_of_setupENUMeasy, medium, complex
documentation_urlVARCHAR(500)Docs link
is_officialBOOLEANDefault: false
created_atTIMESTAMPCreated timestamp

Indexes

  • tool_id
  • integrates_with

API 문서

Tools API

1️⃣ 모든 도구 조회

Endpoint

GET /tools/

Query Parameters

ParameterTypeDescription
categorystring (optional)카테고리별 필터
price_minnumber (optional)최소 가격
price_maxnumber (optional)최대 가격
featuresarray of strings (optional)필수 기능
sortstring (default: “name”)정렬 필드
pagenumber (default: 1)페이지 번호
sizenumber (default: 10)페이지 크기

Response Example

{
  "items": [
    {
      "id": 1,
      "name": "VS Code",
      "slug": "vs-code",
      "category_id": 3,
      "description": "Free source‑code editor",
      "website_url": "https://code.visualstudio.com/",
      "logo_url": "https://example.com/logo.png",
      "is_active": true,
      "query_count": 124,
      "last_queried_at": "2025-11-01T12:34:56Z"
    }
    // …more tools
  ],
  "page": 1,
  "size": 10,
  "total_items": 342,
  "total_pages": 35
}

2️⃣ 도구 상세 조회

Endpoint

GET /tools/{id}/

Path Parameter

  • id – 도구의 정수형 ID.

Response Example

{
  "id": 1,
  "name": "VS Code",
  "slug": "vs-code",
  "category": {
    "id": 3,
    "name": "IDE"
  },
  "description": "Free source‑code editor",
  "website_url": "https://code.visualstudio.com/",
  "logo_url": "https://example.com/logo.png",
  "features": [
    { "name": "IntelliSense", "available": true },
    { "name": "Debugging", "available": true }
  ],
  "pricing_tiers": [
    { "tier_name": "Free", "monthly_price": null, "annual_price": null }
  ],
  "reviews": {
    "avg_rating": 4.7,
    "total_reviews": 215
  }
}

3️⃣ 도구 검색

Endpoint

GET /tools/search/

Query Parameters

ParameterTypeDescription
qstring검색어 (이름, 태그라인 등)
pagenumber페이지 번호 (default 1)
sizenumber페이지 크기 (default 10)

Response모든 도구 조회와 동일한 구조이지만 검색어에 따라 필터링됩니다.

Categories API

Endpoint

GET /categories/

카테고리 목록과 계층 구조를 반환합니다.

Pricing Tiers API

Endpoint

GET /tools/{id}/pricing/

특정 도구에 대한 현재 및 과거 가격 정보를 제공합니다.

Alternatives API

Endpoint

GET /tools/{id}/alternatives/

유사도 점수에 따라 순위가 매겨진 대체 도구 목록을 반환합니다.

Reviews Aggregate API

Endpoint

GET /tools/{id}/reviews/

외부 소스(G2, Capterra, Product Hunt)에서 수집된 평점을 집계합니다.

Features API

Endpoint

GET /tools/{id}/features/

도구의 모든 기능을 카테고리와 티어별 가용성으로 그룹화하여 나열합니다.

Changelog API

Endpoint

GET /tools/{id}/changelog/

가격, 기능, 업데이트 등 변경 사항을 연대순으로 제공합니다.

Integrations API

Endpoint

GET /tools/{id}/integrations/

도구의 네이티브 및 서드파티 통합 정보를 보여줍니다.

Back to Blog

관련 글

더 보기 »