kanko-dori / inol

Inol
0 stars 0 forks source link

フロントとバックの通信方法の決定 #35

Closed ssssota closed 2 years ago

ssssota commented 2 years ago

rest or graphql or grpcweb?

ssssota commented 2 years ago

@nori3636 これ結構コアな部分なのでクリティカルパスになると思います。早めに片付けてしまいたいです

norikmb commented 2 years ago

GraphQL https://zenn.dev/knaka0209/articles/fd9d694b2ce41f

window.fetch https://remix.run/docs/en/v1/other-api/fetch

一旦Loaderに書いてそれを受け取る形になるみたい。

norikmb commented 2 years ago

fetchライブラリ≠axios? Remixではaxiosは使わずそのまま通信できるみたいなことを公式Discordで言われてました

ssssota commented 2 years ago

ここのissueのスコープはfetchライブラリの選定ではなくて、 REST API / GraphQL / gRPC Web のいずれを使ってバックエンドと通信するかという話です axiosを使うとかはこれの後の話です

ssssota commented 2 years ago

REST APIなら /api/inol/:id のリクエスト形式、レスポンス形式を決めましょう

GraphQLなら schema.graphql を書きましょう

などという話になるはずです

norikmb commented 2 years ago

REST APIだとそのあとライブラリとかを決めずにそのまま使えそう。 参考:

export let action: ActionFunction = async ({ request }) => {
  const response = await fetch(
    "https://buttondown.email/api/emails/embed-subscribe/moulton",
    {
      body: await formDataAsQueryString(request),
      method: "POST",
      headers: {
        "Content-Type": "application/x-www-form-urlencoded",
      },
    }
  );

  if (response.status >= 400) {
    // deal with error
    console.log("response", response);
    return { error: true };
  }

  const headers = await setFlash(request, "success");
  return redirect("/", { headers });
};

GraphQLも先駆者が結構いるので、なんとななりそう?感ある。 gRPC Webは良く分かってなくて自分がとっかかりが一切分からないので避けたい

ssssota commented 2 years ago

https://www.webprofessional.jp/rest-2-0-graphql/ これよんで

ssssota commented 2 years ago

できるできないというより、多分できるので、 「どこがよくてどこがダメだから、こっちにする」 という話をしたい

ssssota commented 2 years ago

gRPC Webはできないかも

norikmb commented 2 years ago

今回のアプリに関しては余り複雑にならない気がしていて、記事に言われているような余計なものまで取得するとかリクエスト数が減るみたいなGraphQLのメリットをそこまで実感できないのでは?と思った。調べた限りGraphQLを使用しても特にデメリットはなさそうなので、バックエンド側が実装しやすい方でいいのではないかと思いました

onsd commented 2 years ago

じゃあOpenAPIかな