0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

インポート機能、エクスポート機能APIの作り方(Node.js、Springboot)

Posted at

今回はインポート機能、エクスポート機能APIの作り方を記事にしました。

インポート機能とエクスポート機能を実装するAPIの作り方をステップバイステップで説明します。一般的には、CSVやExcel形式でデータをインポートしたりエクスポートしたりする機能がよく使われます。今回は、Node.jsのExpressとJavaのSpring Boot、データベースとしてMySQLを使った場合の例で解説します。

1. Node.js(Express)を使ったAPIの実装例

必要なライブラリのインストール
まず、必要なライブラリをインストールします。expressはサーバーを構築するために使用し、csv-parserはCSVファイルの読み込みに、json2csvはJSONデータをCSVに変換するために使います。

npm install express csv-parser json2csv multer mysql2
express: APIサーバー
csv-parser: CSVファイルを読み込むためのライブラリ
json2csv: JSONデータをCSVに変換するためのライブラリ
multer: ファイルアップロード用のミドルウェア
mysql2: MySQLと接続するためのライブラリ

ファイル構成

  • index.js
  • uploads/ (インポートするCSVファイルを保存するフォルダ)

1.1 インポートAPIの作成

まず、CSVファイルからデータをインポートするAPIを作成します。multerでアップロードされたファイルを処理し、csv-parserを使ってCSVを読み込み、データベースに保存します。

const express = require('express');
const mysql = require('mysql2');
const multer = require('multer');
const csv = require('csv-parser');
const fs = require('fs');

const app = express();
const upload = multer({ dest: 'uploads/' });

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'test_db'
});

// インポートAPI
app.post('/import', upload.single('file'), (req, res) => {
  const filePath = req.file.path;

  const results = [];

  fs.createReadStream(filePath)
    .pipe(csv())
    .on('data', (data) => results.push(data))
    .on('end', () => {
      results.forEach(row => {
        const { name, age, email } = row;
        connection.query(
          'INSERT INTO users (name, age, email) VALUES (?, ?, ?)',
          [name, age, email],
          (err) => {
            if (err) throw err;
          }
        );
      });
      res.send('CSVファイルからデータをインポートしました');
    });
});

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

1.2 エクスポートAPIの作成

次に、データベースからデータを取得して、CSVファイルとしてエクスポートするAPIを作成します。json2csvを使ってデータをCSV形式に変換します。

const { Parser } = require('json2csv');

// エクスポートAPI
app.get('/export', (req, res) => {
  connection.query('SELECT * FROM users', (err, results) => {
    if (err) throw err;

    const json2csvParser = new Parser();
    const csvData = json2csvParser.parse(results);

    res.header('Content-Type', 'text/csv');
    res.attachment('export.csv');
    res.send(csvData);
  });
});

サーバーの起動
以下のコマンドでサーバーを起動します。

node index.js

これで、CSVファイルをインポートする/importエンドポイントと、CSVとしてデータをエクスポートする/exportエンドポイントが使えるようになります。

2. Spring Bootを使ったAPIの実装例

次に、JavaのSpring Bootを使ってインポート・エクスポートAPIを作成する方法です。ここでは、Apache POIライブラリを使用してExcelやCSVの処理を行います。

必要な依存関係(pom.xml)

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
    </dependency>
</dependencies>

2.1 エンティティの定義

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer age;
    private String email;

    // getters and setters
}

2.2 インポートAPIの作成

Spring Bootでファイルをアップロードし、データをMySQLにインポートします。

@RestController
@RequestMapping("/api")
public class ImportExportController {

    @Autowired
    private UserRepository userRepository;

    @PostMapping("/import")
    public ResponseEntity<String> importData(@RequestParam("file") MultipartFile file) {
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream()))) {
            String line;
            while ((line = reader.readLine()) != null) {
                String[] data = line.split(",");
                User user = new User();
                user.setName(data[0]);
                user.setAge(Integer.parseInt(data[1]));
                user.setEmail(data[2]);
                userRepository.save(user);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ResponseEntity.ok("データをインポートしました");
    }
}

2.3 エクスポートAPIの作成

データベースのデータをCSVとしてエクスポートするAPIです。

@GetMapping("/export")
public void exportData(HttpServletResponse response) throws IOException {
    response.setContentType("text/csv");
    response.setHeader("Content-Disposition", "attachment; filename=\"users.csv\"");

    List<User> users = userRepository.findAll();

    PrintWriter writer = response.getWriter();
    writer.write("ID,Name,Age,Email\n");
    for (User user : users) {
        writer.write(user.getId() + "," + user.getName() + "," + user.getAge() + "," + user.getEmail() + "\n");
    }
}

2.4 Spring Bootサーバーの起動

mvn spring-boot:run

これで、CSVファイルをインポートする/api/importエンドポイントと、データをエクスポートする/api/exportエンドポイントが作成されました。

まとめ
インポート機能:CSVファイルをアップロードし、データをデータベースに保存します。
エクスポート機能:データベースのデータをCSVやExcelファイルとしてダウンロードします。
Node.jsとSpring Bootの両方で、APIの作り方を紹介しましたが、目的に合わせて適切なフレームワークやライブラリを選び、実装してください。
これで、基本的なインポート・エクスポートAPIの実装が可能です。

今回はインポート機能、エクスポート機能APIの作り方を記事にしました。
基本毎日更新していますので、@y-t0910をフォローしていただけると嬉しいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?