バックエンドAPI設計の実践技法 – RESTful/GraphQL設計とOpenAPI仕様書作成

「フロントエンドはできるけど、バックエンドの設計は自信がない…」

そんな悩みを抱えていませんか?

45歳のあなたが長年書いてきたコードは、確かに価値ある経験です。しかし、上流工程への転職を目指すなら、「API設計」という新しいスキルが必要になります。

なぜなら、現代のシステム開発では、フロントエンドとバックエンドが完全に分離され、その橋渡しをするのが「API」だからです。クライアントとの要件定義で「RESTful APIで設計したい」「GraphQLを検討している」という会話についていけなければ、上流エンジニアとしての信頼を得られません。

「設計なんて、今さら学べるのか?」「経験のない分野に挑戦して大丈夫か?」——その不安、よくわかります。

でも、安心してください。あなたには20年のプログラミング経験があります。コードの裏側にある「データの流れ」を理解しているからこそ、API設計の本質を若手より深く理解できるのです。

この記事では、1日1時間×2ヶ月で、実務レベルのAPI設計スキルを身につけるロードマップをお伝えします。完璧を目指す必要はありません。まずは「RESTful APIとは何か」を理解し、小さな設計を1つ完成させることから始めましょう。


目次

第1章: なぜ今、API設計スキルが必要なのか?

結論

API設計は、上流工程への転職で最も評価されるスキルの1つです。

理由

システム開発の現場では、フロントエンドとバックエンドの分離が当たり前になりました。この分離を可能にするのが「API」です。

要件定義やシステム設計の場面で、クライアントから「スマホアプリとWebで同じデータを使いたい」「将来的に外部サービスとも連携したい」という要望が出たとき、あなたが「それならRESTful APIで設計し、OpenAPIで仕様書を作成しましょう」と提案できれば、プログラマではなく設計者として見られます。

転職市場でも、「API設計ができる」ことは年収を50〜100万円押し上げる要因になります。なぜなら、API設計は「技術」と「ビジネス」をつなぐ架け橋だからです。

具体例

46歳でSIerからWeb系企業のテックリードに転職したHさんは、こう語ります。

「面接で『これまでどんなAPI設計をしてきましたか?』と聞かれ、学習で作った簡単なRESTful APIと、OpenAPIで書いた仕様書を見せました。面接官は『実際に手を動かして設計している人は少ない』と驚き、その場で『ぜひ来てほしい』と言われました。年収は500万円から650万円に上がりました」

API設計スキルは、「コードが書ける人」から「システムを設計できる人」への転換を証明する、最強の武器なのです。

まとめ

API設計を学ぶことは、上流工程への扉を開く第一歩です。今日から学習を始めれば、2ヶ月後には転職市場で差別化できるスキルが手に入ります。


第2章: RESTful APIの基礎を7日間でマスターする

結論

最初の1週間で、RESTの6つの原則を理解しましょう。

理由

RESTful APIは、現代のWeb開発で最も広く使われている設計手法です。その理由は、シンプルで理解しやすく、HTTPの標準機能を活用できるからです。

RESTの本質は、「リソース(データ)」を「URLで表現」し、「HTTPメソッド(GET/POST/PUT/DELETE)で操作する」という考え方です。この考え方を理解すれば、どんなシステムでも応用できます。

具体例

RESTの6つの原則

  1. クライアント・サーバー構造: フロントエンドとバックエンドを分離
  2. ステートレス: サーバーはクライアントの状態を保持しない
  3. キャッシュ可能性: レスポンスをキャッシュして効率化
  4. 統一インターフェース: URLとHTTPメソッドの統一ルール
  5. 階層化システム: 負荷分散やセキュリティレイヤーを追加可能
  6. コードオンデマンド(オプション): 必要に応じてクライアント側で実行可能なコードを返す

この中で最も重要なのは「統一インターフェース」です。

RESTful APIの設計例: ユーザー管理

GET    /users          # ユーザー一覧を取得
GET    /users/123      # ID=123のユーザー情報を取得
POST   /users          # 新規ユーザーを作成
PUT    /users/123      # ID=123のユーザー情報を更新
DELETE /users/123      # ID=123のユーザーを削除

良い設計のポイント:

  • URLは名詞(リソース)で表現し、動詞は使わない
  • 複数形を使う(/usersであって/userではない)
  • HTTPメソッドで操作を表現する

悪い設計の例:

POST /createUser      # 動詞を使っている(×)
GET  /getUser?id=123  # クエリパラメータに依存(×)
POST /deleteUser      # DELETEメソッドを使うべき(×)

7日間の学習プラン(1日1時間)

  • 1-2日目: RESTの6原則を理解(動画講座+公式ドキュメント)
  • 3-4日目: HTTPメソッドとステータスコードの使い分けを学ぶ
  • 5-6日目: 簡単なRESTful APIを設計してみる(紙とペンでOK)
  • 7日目: 設計したAPIをNode.js/Expressで実装してみる

まとめ

RESTful APIの基礎は、1週間で十分理解できます。この基礎があれば、次のステップ「実装と仕様書作成」に進めます。

【おすすめ学習教材】

関連記事

モダンJavaScript完全習得ロードマップ – React/Vue.js時代に必須の非同期処理とES6+ JavaScriptでのAPI通信を理解するために、非同期処理をマスターしましょう。

TypeScript導入で変わるコードの質 – 型安全性がもたらす保守性とチーム開発 API開発にTypeScriptを使えば、型安全な開発ができます。


第3章: OpenAPI仕様書で「伝わる設計」を作る

結論

OpenAPI仕様書は、API設計の「共通言語」です。これを書けるかどうかで、設計者としての信頼度が変わります。

理由

API設計で最も難しいのは、「設計意図を正確に伝えること」です。口頭での説明やExcelの表では、誤解が生まれやすく、フロントエンドエンジニアとの認識のずれが発生します。

OpenAPI仕様書を書けば、以下が可能になります:

  1. 自動的にドキュメントが生成される(Swagger UIなど)
  2. フロントエンドとバックエンドが並行開発できる(モックサーバーを使用)
  3. 仕様変更が追跡しやすい(Gitで管理)

面接でOpenAPI仕様書を見せられる人は、まだ少数派です。だからこそ、これを持っているだけで「実務レベルの設計ができる人」と評価されるのです。

具体例

OpenAPI仕様書の基本構造

OpenAPIは、YAML形式でAPIの仕様を記述します。以下は、ユーザー一覧取得APIの例です:

yaml

openapi: 3.0.0
info:
  title: ユーザー管理API
  version: 1.0.0
  description: ユーザー情報の取得・作成・更新・削除を行うAPI

paths:
  /users:
    get:
      summary: ユーザー一覧を取得
      description: 登録されている全ユーザーの情報を取得します
      responses:
        '200':
          description: 成功
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User'
        '500':
          description: サーバーエラー

components:
  schemas:
    User:
      type: object
      properties:
        id:
          type: integer
          example: 123
        name:
          type: string
          example: 田中太郎
        email:
          type: string
          example: tanaka@example.com
```

OpenAPI仕様書を書くメリット



面接での活用例:

「このポートフォリオのAPIは、OpenAPI仕様書で設計しました。こちらがSwagger UIで自動生成したドキュメントです。エンドポイント、リクエスト、レスポンスの構造が一目で分かります」

この説明ができれば、面接官は「この人は本物の設計者だ」と確信します。

学習プラン(1週間、1日1時間)

  • 1-2日目: OpenAPIの基本構文を学ぶ(公式ドキュメント)
  • 3-4日目: Swagger Editorで仕様書を書いてみる
  • 5-6日目: 自分の設計したAPIをOpenAPIで記述
  • 7日目: Swagger UIでドキュメントを自動生成し、GitHubで公開

まとめ

OpenAPI仕様書は、2週間の学習で実務レベルに到達できます。GitHubに公開すれば、それがそのままポートフォリオになります。

【おすすめツール】

  • Postman: API設計・テスト・ドキュメント作成が1つでできるツール(無料プランでも十分、Pro版は月額12ドル〜)
  • Swagger Editor: OpenAPI仕様書をリアルタイムプレビューしながら編集できる無料ツール

関連記事

APIファーストな開発手法 – フロント・バックエンド分離とスキーマ駆動開発 OpenAPI仕様書を起点とした開発フローを学べます。

第4章: GraphQLは学ぶべきか? RESTとの使い分け

結論

まずはRESTを完璧にし、その後でGraphQLを学びましょう。

理由



GraphQLは、Facebookが開発した新しいAPI設計手法で、「クライアントが必要なデータだけを取得できる」という特徴があります。しかし、RESTより学習コストが高く、運用も複雑です。

転職市場では、RESTの求人が圧倒的に多いのが現実です。GraphQLはスタートアップや先進的な企業で採用されていますが、まだ主流ではありません。

学習の優先順位:
1. RESTful API設計(必須)
2. OpenAPI仕様書作成(必須)
3. GraphQL(余裕があれば)

具体例

RESTとGraphQLの違い

REST API: ユーザー情報と投稿を取得する場合
“`
GET /users/123 # ユーザー情報を取得
GET /users/123/posts # ユーザーの投稿を取得

2回のリクエストが必要。

GraphQL: 1回のリクエストで必要なデータだけ取得

graphql

query {
  user(id: 123) {
    name
    email
    posts {
      title
      content
    }
  }
}

GraphQLを選ぶべきケース

  • モバイルアプリなど、通信量を減らしたい場合
  • フロントエンドの要求が頻繁に変わる場合
  • 複雑なデータ構造を扱う場合

RESTで十分なケース

  • シンプルなCRUD操作が中心
  • キャッシュを活用したい場合
  • 既存システムとの互換性を保ちたい場合

まとめ

GraphQLは魅力的ですが、まずはRESTをマスターすることが転職成功への近道です。RESTができれば、GraphQLは「プラスα」として後から学べます。

【GraphQL学習におすすめ】


第5章: Node.js + Expressで実際にAPIを実装する

結論

設計だけでなく、実際に動くAPIを作ることで、初めて実務レベルのスキルが証明できます。

理由

面接で「API設計ができます」と言っても、「実際に作ったことはありますか?」と必ず聞かれます。このとき、GitHubのリポジトリとデモURLを見せられれば、説得力が100倍になります。

採用担当者が見ているのは、**「理論だけでなく、手を動かして作った経験」**です。

具体例

最小構成のRESTful API実装(所要時間:2時間)

環境構築:

bash

mkdir my-api
cd my-api
npm init -y
npm install express

server.js(シンプルなユーザー管理API):

javascript

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

app.use(express.json());

// ダミーデータ
let users = [
  { id: 1, name: '田中太郎', email: 'tanaka@example.com' },
  { id: 2, name: '佐藤花子', email: 'sato@example.com' }
];

// ユーザー一覧取得
app.get('/users', (req, res) => {
  res.json(users);
});

// ユーザー詳細取得
app.get('/users/:id', (req, res) => {
  const user = users.find(u => u.id === parseInt(req.params.id));
  if (!user) return res.status(404).json({ error: 'User not found' });
  res.json(user);
});

// ユーザー作成
app.post('/users', (req, res) => {
  const newUser = {
    id: users.length + 1,
    name: req.body.name,
    email: req.body.email
  };
  users.push(newUser);
  res.status(201).json(newUser);
});

// サーバー起動
app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

動作確認:

bash

node server.js
# ブラウザで http://localhost:3000/users にアクセス

ポートフォリオとしての公開(所要時間:1時間)

  1. GitHubにコードをpush
  2. HerokuまたはVercelで無料デプロイ
  3. README.mdに使用技術と機能説明を記載

まとめ

最小構成のAPIなら、2時間で実装できます。これをGitHubとデプロイ先URLとともに面接で見せれば、「実装力がある人」として評価されます。

【開発環境におすすめ】

  • Docker Desktop: 開発環境を簡単に構築できるツール(Pro版は月額5ドル〜、チーム開発に便利)

第6章: エラーハンドリングとバリデーションで設計の質を上げる

結論

良いAPI設計は、正常系だけでなく、異常系の処理が明確です。

理由

実務では、ユーザーが間違った入力をしたり、サーバーでエラーが発生したりすることは日常茶飯事です。このとき、適切なエラーメッセージとステータスコードを返せるかどうかが、「実務レベルの設計」と「趣味レベルの設計」の分かれ目です。

面接でも「エラーハンドリングはどう考えていますか?」は頻出質問です。ここを説明できれば、年収が50万円変わることもあります。

具体例

HTTPステータスコードの使い分け

ステータスコード意味使用例
200 OK成功GET/PUT/DELETEの成功時
201 Created作成成功POSTで新規リソース作成
400 Bad Requestリクエストが不正バリデーションエラー
401 Unauthorized認証失敗ログインが必要
403 Forbidden権限不足アクセス権限がない
404 Not Foundリソースが存在しない指定IDが見つからない
500 Internal Server Errorサーバーエラー予期しないエラー

エラーレスポンスの設計例

悪い例(情報が少ない):

json

{
  "error": "Invalid request"
}

良い例(エラー内容が明確):

json

{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "入力内容に誤りがあります",
    "details": [
      {
        "field": "email",
        "message": "メールアドレスの形式が正しくありません"
      },
      {
        "field": "age",
        "message": "年齢は0以上である必要があります"
      }
    ]
  }
}

バリデーションの実装例(Express + express-validator)

javascript

const { body, validationResult } = require('express-validator');

app.post('/users',
  // バリデーションルール
  body('name').notEmpty().withMessage('名前は必須です'),
  body('email').isEmail().withMessage('メールアドレスの形式が正しくありません'),
  body('age').isInt({ min: 0 }).withMessage('年齢は0以上である必要があります'),
  
  (req, res) => {
    // バリデーション結果を確認
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(400).json({
        error: {
          code: 'VALIDATION_ERROR',
          message: '入力内容に誤りがあります',
          details: errors.array()
        }
      });
    }

    // 正常処理
    const newUser = {
      id: users.length + 1,
      name: req.body.name,
      email: req.body.email,
      age: req.body.age
    };
    users.push(newUser);
    res.status(201).json(newUser);
  }
);

まとめ

エラーハンドリングとバリデーションは、API設計の質を大きく左右します。この2つを丁寧に実装すれば、「実務レベルの設計力がある」と評価されます。

【おすすめ学習教材】


第7章: 認証・認可でセキュアなAPIを設計する

結論

実務レベルのAPIには、認証(誰が使うか)と認可(何ができるか)の仕組みが必須です。

理由

どんなに優れたAPI設計でも、セキュリティが甘ければ採用されません。特に、個人情報や決済情報を扱うシステムでは、認証・認可の理解は必須です。

面接で「認証はどう実装しますか?」と聞かれたとき、「JWT(JSON Web Token)を使います」と答えられるかどうかで、技術力の評価が変わります。

具体例

認証と認可の違い

  • 認証(Authentication): 「あなたは誰ですか?」を確認(ログイン)
  • 認可(Authorization): 「あなたは何ができますか?」を確認(権限チェック)

JWTを使った認証の流れ

  1. ユーザーがログイン(メールアドレス+パスワード)
  2. サーバーが認証成功後、JWTトークンを発行
  3. クライアントは以降のリクエストで、このトークンをヘッダーに含める
  4. サーバーはトークンを検証し、ユーザーを識別

JWT認証の実装例(Node.js + jsonwebtoken)

javascript

const jwt = require('jsonwebtoken');
const SECRET_KEY = 'your-secret-key'; // 本番では環境変数で管理

// ログインAPI
app.post('/login', (req, res) => {
  const { email, password } = req.body;

  // ユーザー認証(実際はDBで確認)
  const user = users.find(u => u.email === email);
  if (!user || password !== 'password123') {
    return res.status(401).json({ error: '認証に失敗しました' });
  }

  // JWTトークンを発行
  const token = jwt.sign(
    { id: user.id, email: user.email },
    SECRET_KEY,
    { expiresIn: '24h' }
  );

  res.json({ token });
});

// 認証が必要なAPI(ミドルウェア)
const authenticate = (req, res, next) => {
  const token = req.headers.authorization?.split(' ')[1];

  if (!token) {
    return res.status(401).json({ error: 'トークンが必要です' });
  }

  try {
    const decoded = jwt.verify(token, SECRET_KEY);
    req.user = decoded; // ユーザー情報をリクエストに追加
    next();
  } catch (error) {
    return res.status(401).json({ error: '無効なトークンです' });
  }
};

// 認証が必要なエンドポイント
app.get('/profile', authenticate, (req, res) => {
  res.json({ message: `こんにちは、${req.user.email}さん` });
});

面接での活用例

「認証にはJWTを使用しました。ログイン時にトークンを発行し、クライアントはそれをAuthorizationヘッダーに含めます。トークンの有効期限は24時間に設定し、セキュリティを確保しています」

まとめ

認証・認可の理解は、API設計の信頼性を大きく高めます。JWTの実装は1週間で習得でき、ポートフォリオの説得力が格段に上がります。

関連記事

セキュリティ基礎とOWASP Top 10対策 – Webアプリケーションの脆弱性対策入門 API設計に必要なセキュリティ知識を深められます。


第8章: ポートフォリオとして公開するAPIプロジェクト

結論

学習の集大成として、オリジナルのAPIを設計・実装し、GitHubで公開しましょう。

理由

面接で「何か作ったものはありますか?」と聞かれたとき、「ToDoアプリのAPI」と答えられるだけで、他の応募者と差別化できます。

さらに、以下を揃えれば完璧です:

  1. GitHubリポジトリ(コード)
  2. OpenAPI仕様書(Swagger UI)
  3. デプロイ先URL(実際に動くAPI)
  4. README.md(使用技術と設計意図の説明)

具体例

ポートフォリオ向けAPIプロジェクトのテーマ例

テーマ難易度学習期間特徴
ToDoリストAPI初級1週間CRUD操作の基本、認証なし
ブログ記事管理API中級2週間CRUD+検索、JWT認証
簡易EC APIタグ・カテゴリ)中級2週間リレーショナルデータ、画像アップロード
簡易SNS API上級3週間フォロー機能、いいね、リアルタイム通知

ポートフォリオ作成の4ステップ(所要時間:合計20時間)

STEP
テーマを決める(1時間)

自分の興味×実用性で選ぶ。例:「読書管理API」「家計簿API」「健康管理API」

STEP
OpenAPI仕様書で設計(3時間)

エンドポイント、リクエスト・レスポンスの構造を明確にする

STEP
実装(12時間)

Node.js + Express、またはPython + FastAPIで実装

STEP
デプロイとドキュメント作成(4時間)
  • HerokuやRender.comで無料デプロイ
  • README.mdに以下を記載:
    • プロジェクトの目的
    • 使用技術(Node.js, Express, JWT, PostgreSQLなど)
    • エンドポイント一覧
    • 工夫した点(エラーハンドリング、バリデーション、認証など)

45歳Yさんの成功事例

「読書管理APIを作り、GitHubで公開しました。OpenAPI仕様書も作成し、Swagger UIでドキュメントを見せました。面接官は『これだけできれば実務で十分通用する』と評価してくれ、年収は520万円から680万円になりました」

まとめ

ポートフォリオは、あなたの設計力を証明する最強の武器です。20時間投資すれば、転職活動で圧倒的に有利になります。

【デプロイにおすすめ】

  • Heroku: 無料プランでAPIをデプロイ可能(有料プランは月額7ドル〜)
  • Render.com: 無料プランでNode.jsアプリをデプロイできる新しいプラットフォーム

第9章: 次のステップ – フルスタックか上流工程か

結論

API設計をマスターしたら、次は専門性を深める上流工程にシフトするかを選びましょう。

理由

API設計ができるだけでは、転職市場での差別化は不十分です。以下のいずれかの方向性を選び、さらに市場価値を高める必要があります。

具体例

選択肢1: フルスタックエンジニアを目指す

  • フロントエンド(React/Vue.js)を学ぶ
  • データベース設計を深める
  • インフラ(AWS/GCP)を学ぶ

目指す職種: フルスタックエンジニア、Webアプリケーションエンジニア
想定年収: 600〜750万円

選択肢2: 上流工程にシフトする

  • システム設計・アーキテクチャ設計を学ぶ
  • ドメイン駆動設計(DDD)を理解する
  • 要件定義とビジネス理解を深める

目指す職種: ソリューションアーキテクト、ITコンサルタント、テックリード
想定年収: 650〜850万円

選択肢3: API専門家になる

  • マイクロサービスアーキテクチャを学ぶ
  • GraphQLを極める
  • API Gateway、サービスメッシュを理解する

目指す職種: API アーキテクト、プラットフォームエンジニア
想定年収: 700〜900万円

まとめ

あなたの目標は「上流工程で年収650万円以上」でしたね。それなら、選択肢2をおすすめします。API設計は、その第一歩です。

【次のステップにおすすめ】

関連記事

ドメイン駆動設計(DDD)入門 – ビジネスロジックを正しくモデリングする 上流工程に必要な設計思考を学べます。

マイクロサービスアーキテクチャの実践 – 分散システム設計の利点と課題 API設計の応用として、マイクロサービスを学べます。


第10章: 今日から始める3つの行動

結論

この記事を読んだ「今」が、API設計者への第一歩を踏み出すチャンスです。

理由

大きな決断は不要です。まずは、以下の3つの小さな行動から始めてください。

具体例

STEP 1: Udemy講座を1つ購入する(所要時間:10分)

「いつか学ぼう」ではなく、今すぐ購入してください。セールなら1,200円程度です。購入した瞬間、あなたの学習は「本気」に変わります。

おすすめ: Udemy – REST API入門 – Node.jsで学ぶAPIの設計と実装

STEP 2: Swagger Editorで簡単なAPI仕様書を書いてみる(所要時間:30分)

今夜、Swagger Editorにアクセスし、ユーザー一覧取得APIの仕様書を書いてみてください。たった5行のYAMLでも、「自分で設計した」という経験が自信になります。

STEP 3: Node.jsをインストールし、”Hello World”APIを作る(所要時間:30分)

Node.jsをインストールし、Expressで簡単なAPIを作ってみてください。GET /hello{"message": "Hello World"}を返すだけでOKです。

3つの行動を実行した人の変化

44歳プログラマ・Kさん(3日で3つの行動を完了):

「記事を読んで、『API設計は難しい』という思い込みが間違いだと気づきました。その日のうちにUdemyで講座を購入し、翌日にはSwagger Editorで仕様書を書き、翌々日には最初のAPIを実装しました。たった3日で、『自分にもできる』という確信が持てました」

まとめ

この3つのステップは、それぞれ1日で完了できます。つまり、3日あれば「API設計者」への扉を開けるのです。

【今すぐ始める学習セット】


まとめ

API設計習得ロードマップの全体像

第1週: RESTful APIの基礎
→ RESTの6原則、HTTPメソッド、ステータスコードを理解

第2週: OpenAPI仕様書作成
→ Swagger Editorで仕様書を書き、Swagger UIで自動ドキュメント生成

第3-4週: 実装とエラーハンドリング
→ Node.js + Expressで実装、バリデーションとエラー処理を実装

第5-6週: 認証・認可の実装
→ JWT認証を実装し、セキュアなAPIを構築

第7-8週: ポートフォリオ作成
→ オリジナルAPIを設計・実装し、GitHubとHerokuで公開

2ヶ月後: 転職活動開始
→ ポートフォリオを武器に、上流工程の求人に応募

最後に: 45歳のあなたへ

「バックエンドは難しい」「設計なんて自分には無理」——その思い込みは、今日で捨ててください。

あなたには20年のプログラミング経験があります。その経験こそが、API設計の「なぜ」を深く理解する武器になります。若手が構文を暗記している間に、あなたはデータの流れやシステム全体を俯瞰し、実務で活かせるのです。

行動しなければ、何も変わりません。

でも、今日Udemyで講座を1つ買い、今夜Swagger Editorで仕様書を1つ書けば、明日のあなたは「昨日より成長した設計者」になっています。

2ヶ月後、あなたは「API設計ができる上流エンジニア」として、年収650万円以上のオファーを手にしているはずです。

その第一歩を、今日、踏み出しましょう。

【今日から始める学習セット – 最後のご案内】

  • Udemy講座: セール中なら1,200円〜。API設計から上流スキルまで幅広くカバー
  • Kindle Unlimited: 30日間無料体験。通勤時間が学習時間に変わります
  • Postman: API設計・テスト・ドキュメント作成が無料プランでも十分使えます
  • Notion: 学習ログと設計メモの管理に最適。無料プランでも十分

あなたのAPI設計者としての成功を、心から応援しています。

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

コメント

コメントする

CAPTCHA


目次