FastComments.com

FastComments Java SDK


์ด๊ฒƒ์€ FastComments์˜ ๊ณต์‹ Java SDK์ž…๋‹ˆ๋‹ค.

FastComments API์šฉ ๊ณต์‹ Java SDK

์ €์žฅ์†Œ

GitHub์—์„œ ๋ณด๊ธฐ


์„ค์น˜ Internal Link

Maven

ํ”„๋กœ์ ํŠธ์˜ POM์— Repsy ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”:

<repositories>
    <repository>
        <id>repsy</id>
        <name>FastComments Maven Repository on Repsy</name>
        <url>https://repo.repsy.io/mvn/winrid/fastcomments</url>
    </repository>
</repositories>

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”:

<dependencies>
    <!-- API Client -->
    <dependency>
        <groupId>com.fastcomments</groupId>
        <artifactId>client</artifactId>
        <version>0.0.2</version>
    </dependency>

    <!-- Core Library (includes SSO) -->
    <dependency>
        <groupId>com.fastcomments</groupId>
        <artifactId>core</artifactId>
        <version>0.0.2</version>
    </dependency>

    <!-- PubSub Library (for live events) -->
    <dependency>
        <groupId>com.fastcomments</groupId>
        <artifactId>pubsub</artifactId>
        <version>0.0.2</version>
    </dependency>
</dependencies>

Gradle

build.gradle ํŒŒ์ผ์— Repsy ์ €์žฅ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜์„ธ์š”:

repositories {
    mavenCentral()
    maven {
        url "https://repo.repsy.io/mvn/winrid/fastcomments"
    }
}

dependencies {
    // API Client
    implementation "com.fastcomments:client:0.0.2"

    // Core Library (includes SSO)
    implementation "com.fastcomments:core:0.0.2"

    // PubSub Library (for live events)
    implementation "com.fastcomments:pubsub:0.0.2"
}

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ตฌ์„ฑ

์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์„ธ ๊ฐœ์˜ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ API ํด๋ผ์ด์–ธํŠธ, API ์ž‘์—…์„ ๋” ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ์ˆ˜์ž‘์—… ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ํฌํ•จํ•œ ์ฝ”์–ด Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ๋ณ€๊ฒฝ ํ”ผ๋“œ ๊ตฌ๋…์„ ์œ„ํ•œ pubsub ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.

๊ณต๊ฐœ API vs ๋ณด์•ˆ API

API ํด๋ผ์ด์–ธํŠธ์—๋Š” DefaultApi์™€ PublicApi ๋‘ ํด๋ž˜์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. DefaultApi๋Š” API ํ‚ค๊ฐ€ ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ , PublicApi๋Š” ์ธ์ฆ ์—†์ด ๋ธŒ๋ผ์šฐ์ €/๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ ๋“ฑ์—์„œ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” API ํ˜ธ์ถœ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๋น ๋ฅธ ์‹œ์ž‘ Internal Link

์ธ์ฆ๋œ API ์‚ฌ์šฉ (DefaultApi)

์ค‘์š”: ์ธ์ฆ๋œ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ApiClient์— API ํ‚ค๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์š”์ฒญ์ด 401 ์˜ค๋ฅ˜๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

import com.fastcomments.invoker.ApiClient;
import com.fastcomments.invoker.ApiException;
import com.fastcomments.api.DefaultApi;
import com.fastcomments.model.*;

public class Example {
    public static void main(String[] args) {
        // API ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค
        ApiClient apiClient = new ApiClient();

        // REQUIRED: Set your API key (get this from your FastComments dashboard)
        apiClient.setApiKey("YOUR_API_KEY_HERE");

        // ๊ตฌ์„ฑ๋œ ํด๋ผ์ด์–ธํŠธ๋กœ API ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
        DefaultApi api = new DefaultApi(apiClient);

        // ์ด์ œ ์ธ์ฆ๋œ API ํ˜ธ์ถœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
        try {
            // Example: Add an SSO user
            CreateAPISSOUserData userData = new CreateAPISSOUserData();
            userData.setId("user-123");
            userData.setEmail("user@example.com");
            userData.setDisplayName("John Doe");

            AddSSOUserAPIResponse response = api.addSSOUser("YOUR_TENANT_ID", userData)
                .execute();
            System.out.println("User created: " + response);

        } catch (ApiException e) {
            System.err.println("Error: " + e.getResponseBody());
            // Common errors:
            // - 401: API key is missing or invalid
            // - 400: Request validation failed
        }
    }
}

๊ณต๊ฐœ API ์‚ฌ์šฉ (PublicApi)

๊ณต๊ฐœ ์—”๋“œํฌ์ธํŠธ๋Š” ์ธ์ฆ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค:

import com.fastcomments.api.PublicApi;
import com.fastcomments.invoker.ApiException;

PublicApi publicApi = new PublicApi();

try {
    var response = publicApi.getCommentsPublic("YOUR_TENANT_ID", "page-url-id")
        .execute();
    System.out.println(response);
} catch (ApiException e) {
    e.printStackTrace();
}

์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ

  1. 401 "missing-api-key" ์˜ค๋ฅ˜: apiClient.setApiKey("YOUR_KEY")๋ฅผ DefaultApi ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ํ˜ธ์ถœํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.
  2. ์ž˜๋ชป๋œ API ํด๋ž˜์Šค: ์„œ๋ฒ„ ์ธก ์ธ์ฆ ์š”์ฒญ์—๋Š” DefaultApi๋ฅผ, ํด๋ผ์ด์–ธํŠธ ์ธก/๊ณต๊ฐœ ์š”์ฒญ์—๋Š” PublicApi๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  3. API ํ‚ค๊ฐ€ null์ธ ๊ฒฝ์šฐ: SDK๋Š” API ํ‚ค๊ฐ€ null์ด๋ฉด ์ธ์ฆ์„ ์กฐ์šฉํžˆ ๊ฑด๋„ˆ๋›ฐ์–ด 401 ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  Internal Link

๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ ID

์ผ๋ถ€ API ํ˜ธ์ถœ์—์„œ broadcastId๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ์ด ID๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ, ํด๋ผ์ด์–ธํŠธ์—์„œ ๋‚™๊ด€์ ์œผ๋กœ ๋ณ€๊ฒฝ์„ ์ ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด๋ฒคํŠธ๋ฅผ ๋ฌด์‹œํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์•„๋งˆ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค). ์—ฌ๊ธฐ์— UUID๋ฅผ ์ „๋‹ฌํ•˜์„ธ์š”. ์ด ID๋Š” ๋ธŒ๋ผ์šฐ์ € ์„ธ์…˜ ๋‚ด์—์„œ ๋‘ ๋ฒˆ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๊ณ ์œ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋„์›€์ด ํ•„์š”ํ•˜์‹ ๊ฐ€์š”?

Java SDK์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์งˆ๋ฌธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋‹ค์Œ์„ ์ด์šฉํ•˜์„ธ์š”:

๊ธฐ์—ฌ

๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๊ธฐ์—ฌ ๊ฐ€์ด๋“œ๋ผ์ธ์€ GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•˜์„ธ์š”.