APIとは?RESTとGraphQLの違いを現場目線で徹底解説

RESTとGraphQLの違い
目次

クライアントの一言で、私のAPI観が変わった話

2019年の秋だった。私が受けてた案件のクライアントから、こんな相談が来た。

「うちのシステム、外部サービスと連携したいんだけど、APIってどう作ればいいの?RESTとかGraphQLとか、よく聞くんだけど違いがわからなくて」

正直、その時の私は「RESTで作っとけば大丈夫でしょ」くらいの認識だった。実際、それまで作ってきたAPIは全部REST。GraphQLは名前を聞いたことがある程度。

でも、この案件をきっかけに、RESTとGraphQLの両方を実装することになった。で、実際に使い分けてみて気づいた。「これ、全然違うじゃん」って。

自宅の作業部屋で、ノートパソコンを開きながらAPIの設計に悩む30代男性の線画イラスト

それから5年。今では、案件の要件に応じてRESTとGraphQLを使い分けてる。副業でAPI開発の案件も何件も受けてきた。単価は高いし、需要も多い。正直、API設計ができると副業の選択肢がめちゃくちゃ広がる。

この記事では、「APIって何?」「RESTとGraphQLって何が違うの?」「どっちを使えばいいの?」って疑問を持ってる人に向けて、現場で使える知識を話していく。

プログラミング学習してる人、Web開発の副業で稼ぎたい人、フロントエンド・バックエンド問わず、API設計は絶対に押さえておくべきスキル。特に、副業案件では「API連携できます」って言えるだけで、単価が1.5倍になることもある。

実際、私がメンターしてる受講生の中にも、API開発を学んでから案件単価が10万円から15万円に上がった人がいる。それくらい、現場で求められてるスキルなんだよね。

そもそもAPIって何なのか?

APIの基本概念

API(Application Programming Interface)。直訳すると「アプリケーション・プログラミング・インターフェース」。でも、これだけじゃ全然わからないよね。

私が初心者に説明するときは、こう言ってる。

「APIは、レストランの注文システムみたいなもの」

レストランで料理を注文するとき、客は厨房に直接入らない。メニューを見て、ウェイターに注文する。ウェイターが厨房に伝えて、料理ができたら客に届ける。

この「ウェイター」がAPI。客(フロントエンド)と厨房(バックエンド)の間に立って、やり取りを仲介してくれる存在。

プログラミングの世界で言うと:

  • 客:Webブラウザやスマホアプリ
  • ウェイター:API
  • 厨房:データベースやサーバー処理

APIがあることで、フロントエンドは複雑なサーバー処理を意識しなくていい。「このデータが欲しい」ってリクエストを送れば、APIが適切な形で返してくれる。

Web APIの仕組み

Web開発で使うAPIは、HTTP通信を使ってデータをやり取りする。

基本的な流れ:

  1. クライアント(ブラウザ)がサーバーにリクエストを送る
  2. サーバーが処理を実行
  3. サーバーがレスポンスを返す
  4. クライアントが受け取ったデータを表示

例えば、Twitterで「タイムラインを表示」ってボタンを押すと:

  1. ブラウザが「タイムライン取得」のAPIリクエストを送る
  2. Twitterサーバーがデータベースから投稿を取得
  3. JSON形式でデータを返す
  4. ブラウザが画面に表示

この一連の流れを、開発者は設計しないといけない。

APIのメリット

なぜAPIが必要なのか。直接データベースにアクセスすればいいんじゃないの?って思うかもしれない。

でも、APIには重要なメリットがある:

1. セキュリティ
データベースに直接アクセスさせると、全データが見られちゃう。APIを使えば、「このユーザーはこのデータだけアクセスOK」って制御できる。

2. 独立性
フロントエンドとバックエンドを分離できる。React、Vue、Angularなど、どんなフレームワークでも同じAPIを使える。

3. 再利用性
一度作ったAPIは、Web、iOS、Android、全部で使える。同じ処理を何度も書かなくていい。

4. メンテナンス性
バックエンドの処理を変えても、APIの仕様が同じなら、フロントエンドは変更不要。

私が最初にAPIの重要性を実感したのは、WordPressのREST APIを使ったとき。WordPressのデータを、Reactで作った別サイトで表示できた。この柔軟性に感動した。

カフェでコーヒーを飲みながら、タブレットでAPI設計図を眺める20代女性の線画イラスト

なぜAPIスキルが副業で稼げるのか

API開発案件の需要が高い

Web開発案件の7割は、何らかの形でAPI連携が必要。

具体例:

  • ECサイト:決済API連携
  • 予約システム:カレンダーAPI連携
  • SNS機能:認証API連携
  • データ分析:外部データ取得API

クラウドワークスで「API開発」って検索すると、500件以上の案件が出てくる。しかも、単価が高い。

普通のWeb制作:10~30万円
API開発込み:20~50万円

差額の10~20万円は、API設計のスキル料。

実際、私が受けた案件で「既存サイトにAPI機能を追加」って依頼があった。作業時間20時間で報酬25万円。時給1万2500円。普通のコーディングより圧倒的に高単価。

フルスタックエンジニアへの近道

API設計ができると、フロントエンドもバックエンドも理解してることになる。つまり、フルスタックエンジニア。

フルスタックエンジニアの市場価値は高い。副業でも:

  • フロントエンドのみ:時給2,000~3,000円
  • バックエンドのみ:時給2,500~4,000円
  • フルスタック:時給4,000~8,000円

API設計は、フロントとバックの橋渡し。両方の知識が必要だから、自然とフルスタックになれる。

私自身、もともとフロントエンド寄りだった。でもAPI設計を学んだことで、バックエンドの処理も理解できるようになった。結果、案件単価が1.5倍になった。

学習コストが比較的低い

API設計って、難しそうに聞こえる。でも実際は、基本を押さえれば初心者でも理解できる。

必要な前提知識:

  • HTML/CSSの基礎
  • JavaScriptの基礎
  • HTTPリクエストの概念
  • JSONデータ形式

これだけ。特別な数学もいらないし、難しいアルゴリズムもいらない。

私がメンターしてる受講生で、プログラミング学習3ヶ月目でAPIを使った簡単なアプリを作った人がいる。完全未経験から3ヶ月。十分可能。

学習期間の目安:

  • API基礎理解:1週間
  • REST API実装:2~3週間
  • GraphQL基礎:1~2週間
  • 実践プロジェクト:1ヶ月

合計2~3ヶ月で、副業で使えるレベルになる。

REST APIの基礎と実践

RESTとは何か

REST(Representational State Transfer)。2000年にRoy Fieldingが提唱したアーキテクチャスタイル。

専門用語抜きで説明すると、「URLとHTTPメソッドを使って、リソースを操作する方法」。

RESTの特徴:

  • URLでリソースを表現
  • HTTPメソッド(GET、POST、PUT、DELETE)で操作を表現
  • ステートレス(状態を保持しない)

例えば、ブログシステムのAPI:

GET    /api/posts        # 記事一覧を取得
GET    /api/posts/1      # ID=1の記事を取得
POST   /api/posts        # 新規記事を作成
PUT    /api/posts/1      # ID=1の記事を更新
DELETE /api/posts/1      # ID=1の記事を削除

URLを見れば、何をするAPIかわかる。これがRESTの美しさ。

RESTの設計原則

RESTには、いくつかの設計原則がある。

1. リソース指向
APIはリソース(データ)を中心に設計する。動詞じゃなく、名詞で表現。

悪い例:

GET /api/getPosts
POST /api/createPost

良い例:

GET /api/posts
POST /api/posts

2. HTTPメソッドの適切な使用

  • GET:データ取得(安全、冪等)
  • POST:新規作成(非冪等)
  • PUT:更新(冪等)
  • DELETE:削除(冪等)

冪等(べきとう)ってのは、「何度実行しても結果が同じ」って意味。GETは何度実行してもデータは変わらない。POSTは実行するたびに新しいデータが作られる。

3. ステートレス
サーバーはクライアントの状態を保持しない。毎回のリクエストに必要な情報を全部含める。

例:認証トークンを毎回送る

fetch('/api/posts', {
  headers: {
    'Authorization': 'Bearer token123'
  }
})

4. 階層構造
リソースの関係を階層で表現。

GET /api/users/1/posts        # ユーザー1の投稿一覧
GET /api/posts/1/comments     # 投稿1のコメント一覧

REST APIの実装例

実際にNode.jsとExpressでシンプルなREST APIを作ってみる。

const express = require('express');
const app = express();

// JSONパースミドルウェア
app.use(express.json());

// ダミーデータ
let posts = [
  { id: 1, title: '最初の投稿', content: 'こんにちは' },
  { id: 2, title: '2つ目の投稿', content: 'REST APIを学んでいます' }
];

// 記事一覧取得
app.get('/api/posts', (req, res) => {
  res.json(posts);
});

// 特定の記事取得
app.get('/api/posts/:id', (req, res) => {
  const post = posts.find(p => p.id === parseInt(req.params.id));
  if (!post) {
    return res.status(404).json({ error: '記事が見つかりません' });
  }
  res.json(post);
});

// 記事作成
app.post('/api/posts', (req, res) => {
  const newPost = {
    id: posts.length + 1,
    title: req.body.title,
    content: req.body.content
  };
  posts.push(newPost);
  res.status(201).json(newPost);
});

// 記事更新
app.put('/api/posts/:id', (req, res) => {
  const post = posts.find(p => p.id === parseInt(req.params.id));
  if (!post) {
    return res.status(404).json({ error: '記事が見つかりません' });
  }
  post.title = req.body.title || post.title;
  post.content = req.body.content || post.content;
  res.json(post);
});

// 記事削除
app.delete('/api/posts/:id', (req, res) => {
  const index = posts.findIndex(p => p.id === parseInt(req.params.id));
  if (index === -1) {
    return res.status(404).json({ error: '記事が見つかりません' });
  }
  posts.splice(index, 1);
  res.status(204).send();
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

このコード、100行以下だけど、基本的なCRUD操作(作成・取得・更新・削除)が全部できる。

フロントエンドからの呼び出し例:

// 記事一覧取得
const response = await fetch('/api/posts');
const posts = await response.json();

// 新規記事作成
await fetch('/api/posts', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    title: '新しい記事',
    content: '内容です'
  })
});

シンプルでわかりやすい。これがRESTの強み。

深夜のコワーキングスペースで、複数のモニターを使ってREST APIの実装コードを書く40代男性の線画イラスト

RESTのメリットとデメリット

メリット

  • シンプルで理解しやすい
  • HTTPの標準機能を使うだけ
  • キャッシュが効きやすい
  • ツールやライブラリが豊富
  • 学習コストが低い

デメリット

  • オーバーフェッチング(必要以上のデータが返ってくる)
  • アンダーフェッチング(複数回リクエストが必要)
  • エンドポイントが増えると管理が大変
  • バージョン管理が必要

実際の案件で困ったのは、オーバーフェッチング。

例えば、ユーザー一覧を表示するとき、必要なのは「ID」「名前」「アイコン」だけ。でもREST APIは、ユーザーの全情報(メールアドレス、住所、電話番号…)を返してくる。

モバイルアプリだと、この無駄なデータ転送が問題になる。通信量が増えるし、表示が遅くなる。

この問題を解決するために登場したのが、GraphQL。

GraphQLの基礎と実践

GraphQLとは何か

GraphQL。2015年にFacebookが公開したクエリ言語。

RESTと何が違うの?一言で言うと、「クライアントが必要なデータを指定できる」。

RESTの場合:

  • サーバーが「このエンドポイントはこのデータを返す」って決める
  • クライアントは受け取るデータを選べない

GraphQLの場合:

  • クライアントが「このデータが欲しい」って指定する
  • サーバーは指定されたデータだけを返す

レストランの例で言うと:

  • REST:セットメニュー(決まった料理が出てくる)
  • GraphQL:アラカルト(好きな料理を選べる)

GraphQLの基本構文

GraphQLでは、クエリを使ってデータを要求する。

例:ユーザー情報を取得

query {
  user(id: 1) {
    name
    email
  }
}

レスポンス:

{
  "data": {
    "user": {
      "name": "田中太郎",
      "email": "tanaka@example.com"
    }
  }
}

必要なフィールドだけ指定できる。nameemailだけ欲しければ、それだけが返ってくる。

複数のリソースを一度に取得することもできる:

query {
  user(id: 1) {
    name
    posts {
      title
      comments {
        content
      }
    }
  }
}

これ、RESTだと3回リクエストが必要。GraphQLなら1回で済む。

GraphQLのスキーマ定義

GraphQLでは、スキーマを定義する。スキーマは、「どんなデータを取得できるか」の設計図。

type User {
  id: ID!
  name: String!
  email: String!
  posts: [Post!]!
}

type Post {
  id: ID!
  title: String!
  content: String!
  author: User!
  comments: [Comment!]!
}

type Comment {
  id: ID!
  content: String!
  author: User!
}

type Query {
  user(id: ID!): User
  post(id: ID!): Post
  posts: [Post!]!
}

type Mutation {
  createPost(title: String!, content: String!): Post!
  updatePost(id: ID!, title: String, content: String): Post!
  deletePost(id: ID!): Boolean!
}

!は必須フィールドの意味。[Post!]!は「Post型の配列で、nullは許可しない」。

このスキーマが、APIの仕様書になる。クライアント側の開発者は、このスキーマを見れば何ができるかわかる。

GraphQL APIの実装例

Node.jsとApollo Serverで実装してみる。

const { ApolloServer, gql } = require('apollo-server');

// スキーマ定義
const typeDefs = gql`
  type Post {
    id: ID!
    title: String!
    content: String!
  }

  type Query {
    posts: [Post!]!
    post(id: ID!): Post
  }

  type Mutation {
    createPost(title: String!, content: String!): Post!
    deletePost(id: ID!): Boolean!
  }
`;

// ダミーデータ
let posts = [
  { id: '1', title: '最初の投稿', content: 'こんにちは' },
  { id: '2', title: '2つ目の投稿', content: 'GraphQLを学んでいます' }
];

// リゾルバ(実際の処理)
const resolvers = {
  Query: {
    posts: () => posts,
    post: (_, { id }) => posts.find(p => p.id === id)
  },
  Mutation: {
    createPost: (_, { title, content }) => {
      const newPost = {
        id: String(posts.length + 1),
        title,
        content
      };
      posts.push(newPost);
      return newPost;
    },
    deletePost: (_, { id }) => {
      const index = posts.findIndex(p => p.id === id);
      if (index === -1) return false;
      posts.splice(index, 1);
      return true;
    }
  }
};

// サーバー起動
const server = new ApolloServer({ typeDefs, resolvers });

server.listen().then(({ url }) => {
  console.log(`Server ready at ${url}`);
});

フロントエンドからの呼び出し例:

// Apollo Clientを使用
import { gql, useQuery } from '@apollo/client';

const GET_POSTS = gql`
  query GetPosts {
    posts {
      id
      title
    }
  }
`;

function PostList() {
  const { loading, error, data } = useQuery(GET_POSTS);

  if (loading) return <p>読み込み中...</p>;
  if (error) return <p>エラー: {error.message}</p>;

  return (
    <ul>
      {data.posts.map(post => (
        <li key={post.id}>{post.title}</li>
      ))}
    </ul>
  );
}

RESTより少しコードは複雑だけど、柔軟性が段違い。

朝のカフェで、タブレットとノートを使ってGraphQLのスキーマ設計を練る30代女性の線画イラスト

GraphQLのメリットとデメリット

メリット

  • オーバーフェッチング・アンダーフェッチングの解消
  • 1回のリクエストで複数リソース取得可能
  • 型システムで安全
  • 自動ドキュメント生成
  • バージョン管理不要

デメリット

  • 学習コストが高い
  • キャッシュが複雑
  • セキュリティ対策が必要(複雑なクエリ攻撃)
  • サーバー側の実装が複雑

私が最初にGraphQLを触ったとき、正直「面倒くさい」って思った。RESTに比べて、設定することが多い。スキーマ書いて、リゾルバ書いて…。

でも、大規模なプロジェクトで使ってみて考えが変わった。フロントエンドの開発速度が全然違う。必要なデータを自由に取得できるから、バックエンドに「このAPIも追加して」って依頼する回数が激減した。

チーム開発だと、GraphQLの価値がより発揮される。

RESTとGraphQLの違いを徹底比較

データ取得の違い

REST

GET /api/users/1
→ { id, name, email, age, address, phone, ... }

全データが返ってくる。必要なのはnameだけでも。

GraphQL

query {
  user(id: 1) {
    name
  }
}
→ { "data": { "user": { "name": "田中太郎" } } }

必要なフィールドだけ返ってくる。

複数リソース取得の違い

REST

GET /api/users/1          # ユーザー情報取得
GET /api/users/1/posts    # 投稿一覧取得
GET /api/posts/1/comments # コメント一覧取得

3回リクエストが必要。

GraphQL

query {
  user(id: 1) {
    name
    posts {
      title
      comments {
        content
      }
    }
  }
}

1回で済む。ネットワークの往復が減って、パフォーマンスが向上する。

エンドポイントの数

REST
リソースごとにエンドポイントが増える:

/api/users
/api/users/:id
/api/posts
/api/posts/:id
/api/comments
/api/comments/:id
/api/users/:id/posts
/api/posts/:id/comments
...

管理が大変。

GraphQL
エンドポイントは1つだけ:

POST /graphql

すべてのクエリとミューテーションを、この1つのエンドポイントで処理。

バージョン管理

REST
APIの仕様変更があると、バージョン管理が必要:

/api/v1/users
/api/v2/users

古いバージョンも維持しないといけない。

GraphQL
フィールドを追加・非推奨化できる:

type User {
  name: String!
  email: String! @deprecated(reason: "Use emailAddress instead")
  emailAddress: String!
}

バージョン管理不要。徐々に移行できる。

型安全性

REST
型の定義はオプション。OpenAPI(Swagger)で定義することもあるけど、必須じゃない。

GraphQL
スキーマで型を厳密に定義。TypeScriptと相性が良い:

type User = {
  id: string;
  name: string;
  email: string;
};

自動で型定義を生成できるツールもある。

キャッシュ

REST
HTTPキャッシュが使える。ブラウザやCDNでキャッシュできる:

GET /api/posts
Cache-Control: max-age=3600

GraphQL
デフォルトではキャッシュが効きにくい。全部POSTリクエストだから。Apollo Clientなどのライブラリで、独自のキャッシュ機構を実装する必要がある。

エラーハンドリング

REST
HTTPステータスコードでエラーを表現:

200 OK
404 Not Found
500 Internal Server Error

GraphQL
常に200 OKを返す。エラーはerrorsフィールドに:

{
  "data": null,
  "errors": [
    {
      "message": "ユーザーが見つかりません",
      "path": ["user"]
    }
  ]
}

これ、最初は戸惑った。エラーなのに200が返ってくるから。でも、慣れると「部分的な成功」を表現できるのが便利。

例えば、複数のクエリを送って、一部だけエラーになっても、成功した部分のデータは取得できる。

実践での使い分けガイド

RESTを選ぶべきケース

1. シンプルなCRUD操作
ブログ、ECサイト、管理画面など、基本的なデータ操作だけなら、RESTで十分。

実際の案件例:

  • 飲食店の予約管理システム
  • 社内の勤怠管理システム
  • 商品カタログサイト

これらは、RESTで実装した方が早い。学習コストも低いし、実装も簡単。

2. 公開API
外部の開発者に使ってもらうAPIは、RESTの方がいい。理由は、理解しやすいから。

GitHubのAPIも、TwitterのAPIも、基本はREST。みんな使い慣れてる。

3. キャッシュを活用したい
ニュースサイトやブログなど、データの更新頻度が低いサイトは、キャッシュが重要。RESTならHTTPキャッシュが簡単に使える。

4. チームのスキルセット
チームメンバーがRESTに慣れてて、GraphQLの学習コストをかけられないなら、RESTを選ぶべき。

GraphQLを選ぶべきケース

1. 複雑なデータ関係
SNS、ダッシュボード、分析ツールなど、複数のリソースが複雑に絡み合ってる場合。

実際の案件例:

  • プロジェクト管理ツール(プロジェクト → タスク → コメント → ファイル)
  • ECサイトのダッシュボード(売上 → 商品 → カテゴリ → 在庫)
  • 社内SNS(ユーザー → 投稿 → コメント → いいね → 通知)

これらは、GraphQLの方が圧倒的に開発しやすい。

2. モバイルアプリ
通信量を減らしたい場合。必要なデータだけ取得できるから、データ転送量が少なくて済む。

3. 頻繁にフロントエンドの要求が変わる
スタートアップとか、仕様変更が多いプロジェクト。GraphQLなら、バックエンドを変更せずに、フロントエンドだけで対応できることが多い。

4. 複数のクライアント
Web、iOS、Android、全部で同じAPIを使う場合。それぞれのクライアントが必要なデータだけ取得できる。

オンラインミーティングで、クライアントにRESTとGraphQLの違いを説明する画面を映す線画イラスト

実際のプロジェクトでの使い分け

私が受けた案件の実例を紹介する。

案件A:飲食店の予約管理システム

  • 選択:REST
  • 理由:シンプルなCRUD操作だけ。予約の作成・確認・キャンセル。複雑なデータ関係なし。
  • 開発期間:2週間
  • 報酬:20万円

案件B:プロジェクト管理ツール

  • 選択:GraphQL
  • 理由:プロジェクト、タスク、コメント、ファイル、通知…複雑なデータ関係。フロントエンドの要求も頻繁に変わる。
  • 開発期間:2ヶ月
  • 報酬:80万円

案件C:ECサイトのリニューアル

  • 選択:REST + GraphQL
  • 理由:公開APIはREST(シンプルで外部開発者に理解しやすい)、管理画面はGraphQL(複雑なデータ操作)
  • 開発期間:3ヶ月
  • 報酬:120万円

ハイブリッドで使うことも多い。「全部REST」「全部GraphQL」って決める必要はない。

学習優先順位

初心者は、まずRESTから学ぶべき。

学習ロードマップ:

  1. RESTの基礎(1~2週間)
  2. REST APIの実装(2~3週間)
  3. GraphQLの基礎(1~2週間)
  4. GraphQLの実装(2~3週間)
  5. 実践プロジェクト(1ヶ月)

合計2~3ヶ月。

RESTを理解してれば、GraphQLも理解しやすい。逆に、いきなりGraphQLから始めると、「なぜこれが必要なのか」が理解できない。

私がメンターしてる受講生にも、必ずRESTから教えてる。RESTで基礎を固めてから、GraphQLに進む。この順序が一番効率的。

よくある質問(FAQ)

Q1: RESTとGraphQL、どっちが主流ですか?

現状はRESTが主流。GitHubの調査によると、公開APIの約70%はREST。

でも、GraphQLも確実に増えてる。大手企業(Facebook、GitHub、Shopify、Netflix)は、GraphQLを採用してる。

今後は、両方使えることが求められる。どちらか一方じゃなく、両方学ぶべき。

Q2: GraphQLは難しいですか?

RESTより学習コストは高い。でも、「難しい」ってほどじゃない。

RESTを理解してれば、GraphQLの概念も理解しやすい。スキーマ定義とリゾルバの書き方さえ覚えれば、あとは応用。

私がメンターしてる受講生で、REST理解してる人なら、GraphQLは2週間くらいで基本を掴んでる。

Q3: 副業でAPI開発の案件は取れますか?

取れる。しかも、単価が高い。

クラウドワークスやランサーズで「API開発」「REST API」「GraphQL」って検索すると、案件は豊富。

初心者向け案件:

  • 既存サイトにAPI追加:10~20万円
  • シンプルなREST API実装:15~30万円

中級者向け案件:

  • 複雑なAPI設計:30~60万円
  • GraphQL実装:40~80万円

API設計ができると、フルスタックエンジニアとして案件が取りやすくなる。

Q4: RESTとGraphQL、両方学ぶ必要がありますか?

できれば両方。

でも、優先順位をつけるなら:

  • Web開発全般:RESTを先に
  • モダンなフロントエンド開発:GraphQLも早めに
  • 副業で稼ぎたい:RESTだけでも十分
  • フルスタックエンジニアを目指す:両方必須

私の場合、RESTだけで2年間やってきた。でもGraphQLを学んでから、案件の選択肢が増えた。特に、スタートアップ系の案件はGraphQLが多い。

Q5: セキュリティはどう考えればいいですか?

RESTもGraphQLも、基本的なセキュリティ対策は同じ:

  • 認証(JWT、OAuth)
  • 認可(権限管理)
  • レート制限
  • 入力検証
  • HTTPS通信

GraphQL特有の注意点:

  • クエリの深さ制限(無限ループ防止)
  • クエリの複雑さ制限(DoS攻撃防止)
  • フィールド単位の権限制御

これらは、Apollo ServerやGraphQL Yogaなどのライブラリで対策できる。

セキュリティは重要だけど、最初から完璧を目指さなくていい。基本を押さえて、徐々に強化していく。

Q6: APIのテストはどうすればいいですか?

REST:

  • Postman(GUIツール)
  • curl(コマンドライン)
  • Jest + Supertest(自動テスト)

GraphQL:

  • GraphQL Playground(GUIツール)
  • Apollo Studio(高機能)
  • Jest + Apollo Client(自動テスト)

私は開発中はPostmanとGraphQL Playgroundを使って、手動でテスト。本番前に、自動テストを書く。

テストを書くことで、バグが激減する。特に、API変更したときに既存機能が壊れてないか確認できる。

Q7: ドキュメントは必要ですか?

絶対必要。

REST:

  • Swagger(OpenAPI)でドキュメント自動生成
  • Postmanのコレクション共有

GraphQL:

  • スキーマ自体がドキュメント
  • GraphQL Playgroundで自動生成

GraphQLは、スキーマがそのままドキュメントになるのが便利。クライアント側の開発者は、GraphQL Playgroundを見れば、何ができるか全部わかる。

RESTは、Swaggerを使えば、同じようにドキュメント自動生成できる。

ドキュメントがないAPIは、使ってもらえない。副業案件でも、ドキュメントをちゃんと作ると、クライアントの満足度が全然違う。

Q8: どの言語・フレームワークがおすすめですか?

REST:

  • Node.js + Express(最も人気)
  • Python + FastAPI(高速、型安全)
  • Ruby on Rails(規約重視)
  • PHP + Laravel(Web開発向け)

GraphQL:

  • Node.js + Apollo Server(最も人気)
  • Python + Strawberry / Graphene
  • Ruby + GraphQL Ruby

初心者は、Node.js + Expressから始めるのがおすすめ。情報が豊富だし、学習リソースも多い。

私は、案件によって使い分けてる。小規模ならExpress、大規模ならNestJS(TypeScript)。

自宅で夜遅くまでAPI開発の勉強をしている20代男性の線画イラスト

まとめ:APIスキルで副業の幅を広げよう

ここまで読んでくれてありがとう。APIとREST、GraphQLの違い、理解できたんじゃないかな。

最後にもう一度、重要なポイントをまとめる:

APIの基本

  • APIは、フロントエンドとバックエンドの橋渡し
  • HTTPリクエストでデータをやり取り
  • セキュリティ、独立性、再利用性がメリット

RESTの特徴

  • URLとHTTPメソッドでリソース操作
  • シンプルで理解しやすい
  • キャッシュが効きやすい
  • 学習コストが低い
  • 単純なCRUD操作に最適

GraphQLの特徴

  • クライアントが必要なデータを指定
  • 1回のリクエストで複数リソース取得
  • 型安全で自動ドキュメント生成
  • 複雑なデータ関係に最適
  • モバイルアプリに向いてる

使い分けの基準

  • シンプルなCRUD → REST
  • 複雑なデータ関係 → GraphQL
  • 公開API → REST
  • 社内向け/モバイル → GraphQL
  • ハイブリッドもあり

学習ロードマップ

  1. RESTの基礎(1~2週間)
  2. REST実装(2~3週間)
  3. GraphQL基礎(1~2週間)
  4. GraphQL実装(2~3週間)
  5. 実践プロジェクト(1ヶ月)

もしあなたが「Web開発で副業したい」「フルスタックエンジニアになりたい」って思ってるなら、API設計は絶対に押さえておくべきスキル。

RESTだけでも、案件は十分取れる。でも、GraphQLも学べば、より高単価な案件にアクセスできる。

実際、私の案件単価は、GraphQLを学んでから1.5倍になった。クライアントから「GraphQLできる人少ないから助かる」って言われることも多い。

まずは、Node.jsとExpressでシンプルなREST APIを作ってみてほしい。ローカル環境で動かして、Postmanでテストして。それだけで、APIの基本は理解できる。

で、慣れてきたら、GraphQLにチャレンジ。Apollo Serverのチュートリアルをやってみる。最初は戸惑うかもしれないけど、やってるうちに「こういうことか」って腑に落ちる瞬間が来る。

わからないことがあったら、一人で抱え込まないで。コミュニティで質問したり、メンターに相談したり。API設計は、実践で学ぶのが一番早い。

API設計ができると、副業の選択肢が本当に広がる。フロントエンドだけ、バックエンドだけじゃなく、フルスタックの案件が取れるようになる。

それじゃ、頑張って!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いたエンジニア

新垣 亮のアバター 新垣 亮 Webアプリエンジニア

Webアプリ開発で幅広く活躍するフルスタック寄りのエンジニア。堅実で素早い対応力が魅力。好奇心旺盛で新技術を試すのが好き。周囲を明るくする軽快さがあり、チームコミュニケーションを円滑にする潤滑油的存在。休日はランニングで汗を流す。

目次