今回はインポート機能、エクスポート機能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をフォローしていただけると嬉しいです。