arrow-left

All pages
gitbookPowered by GitBook
1 of 1

Loading...

REST

hashtag
A. REST

REST API ๋งตํ•‘์—๋Š” subscribe๋ฅผ ์ œ์™ธํ•œ call, publish, map ์ปค๋„ฅํ„ฐ๋ฅผ ์ด์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

basePath๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ดํ•˜ REST ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

description์€ ๋ฌธ์„œ ์ƒ์„ฑ์‹œ ํ™œ์šฉ๋˜๋ฉฐ Markdown์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค (์˜ต์…˜).

Call

GET /players/1 ์š”์ฒญ์ด player.get ์•ก์…˜์„ { id: 1 } ํŽ˜์ด๋กœ๋“œ์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•˜๊ณ  ์„ฑ๊ณต์‹œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

depreacted๋Š” ๋ฌธ์„œ ์ƒ์„ฑ์‹œ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค (์˜ต์…˜).

๋ผ์šฐํŠธ path๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ทœ์น™์€ ๋ฅผ ์ฐธ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GET /players/me ์š”์ฒญ์ด player.get ์•ก์…˜์„ { id: <์ธ์ฆ ์ปจํ…์ŠคํŠธ์˜ player.id> } ์ •๋ณด๋กœ๋ถ€ํ„ฐ ํŽ˜์ด๋กœ๋“œ์™€ ํ•จ๊ป˜ ํ˜ธ์ถœํ•˜๊ณ  ์„ฑ๊ณต์‹œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Map

๋˜๋Š” map ์ปค๋„ฅํ„ฐ (Inline JavaScript Function String)๋ฅผ ํ†ตํ•ด ์ธ์ฆ ์ปจํ…์ŠคํŠธ์˜ player ๊ฐ์ฒด๋ฅผ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„์— ๋‹ค์‹œ ๋‹ค๋ฃจ๋Š” Inline JavaScript Function String์€ API Gateway์˜ Node.js VM ์ƒŒ๋“œ๋ฐ•์Šค์—์„œ ํ•ด์„๋ฉ๋‹ˆ๋‹ค.

Publish

POST /players/1 (body: { message: "blabla" }) ์š”์ฒญ์€ player.message ์ด๋ฒคํŠธ๋ฅผ { userId: id: <์ธ์ฆ ์ปจํ…์ŠคํŠธ์˜ player.id>, message: "blabla" } ํŽ˜์ด๋กœ๋“œ์™€ ํ•จ๊ป˜ publishํ•˜๊ณ  ์„ฑ๊ณต์‹œ ๋ฐœ์†ก๋œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

Params

REST API์˜ params ๋งตํ•‘์—๋Š” @path, @body, @query, @context ๊ฐ์ฒด๋ฅผ ์ด์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

hashtag

    REST: {
      basePath: "/players",
      description: "player service REST API",
      routes: [
path-to-regexparrow-up-right
        {
          method: "GET",
          path: "/:id",
          deprecated: false,
          description: "Get player information by id",
          call: {
            action: "player.get",
            params: {
              id: "@path.id",
            },          
          },
        },
        {
          method: "GET",
          path: "/me",
          deprecated: false,
          description: "Get player information of mine",
          call: {
            action: "player.get",
            params: {
              id: "@context.user.player.id",
            },          
          },
        },
        {
          method: "GET",
          path: "/me",
          deprecated: false,
          description: "Get player information of mine",
          map: `({ path, query, body, context }) => context.user.player`,
        },
        {
          method: "POST",
          path: "/message",
          deprecated: false,
          description: "Push notifications to all players",
          publish: {
            event: "player.message",
            broadcast: false,
            params: {
              userId: "@context.user.player.id",
              message: "@body.message",
            },
          },
        },
      ],
    },
// @body ๊ฐ์ฒด ์ „์ฒด๋ฅผ ํŽ˜์ด๋กœ๋“œ๋กœ ์ „๋‹ฌํ•˜๊ฑฐ๋‚˜ ์ŠคํŠธ๋ฆผ์„ ์ „๋‹ฌ ํ•  ๋•Œ ์ด์šฉ๋ฉ๋‹ˆ๋‹ค.
params: "@body",

// @ ๋ฌธ์ž์—ด๋กœ ์‹œ์ž‘๋˜์ง€ ์•Š๋Š” ๊ฐ’๋“ค์€ ํ•ด์„๋˜์ง€ ์•Š๊ณ  ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
params: {
  foo: "@path.foo", // will bar parsed
  bar: "query.bar", // will be "query.bar"
  zzz: ["any", { obj: "ject", can: "be", "use": 2 }],
},

// ํ•ญ์ƒ string ํƒ€์ž…์„ ๊ฐ–๋Š” @query, @path ๊ฐ์ฒด์˜ ์†์„ฑ๋“ค์— ํ•œํ•ด์„œ ํƒ€์ž…์„ boolean์ด๋‚˜ number๋กœ ๋ณ€ํ™˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
params: {
  foo: "@path.foo:number",
  bar: "@query.bar:boolean",
},