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?

More than 1 year has passed since last update.

JShell (Java Shell Tool) でREST APIにPOSTアクセスしてみる

Posted at

概要

本記事では、JShell(Java Shell Tool)で、REST APIにPOSTアクセスしてみる例を紹介します。

対象読者

  • curlでもPowerShellでもREST APIアクセスは簡単だけれども、もしJShellでやったらどうなるのか興味がある方

想定する環境

  • 少なくともJava11以上(Java11で追加されたHttpClientを使っています)

記事執筆時の実行環境

以下の通りです。

  • Windows 11 Pro 22H2
  • jshell 17.0.6 (java 17.0.6 2023-01-17 LTS)

JShellのプログラムでアクセスしてみる

例としてアクセスするAPI

Qiitaの「投稿」リソースで、新規に記事を作成するAPI (https://qiita.com/api/v2/docs#post-apiv2items )を例にJShellのコードを説明します。

このAPIは、POSTアクセスで、所定の内容をリクエストボディに含めて送信することにより、Qiitaの新規記事投稿が実行できるものです。

例では、上記APIドキュメントを参考に、Qiitaの記事を「限定共有記事」として投稿するリクエストを作りました。

JShellのコード

以下のようなコードを書きました。

import java.io.*;
import java.net.*;
import java.net.http.*;
import java.nio.file.*;
import java.util.*;

// if proxy is needed, uncomment these lines.
// System.getProperty("http.proxyHost", "http://your.lovely.proxy.com");
// System.getProperty("http.proxyPort", "8080");

var url = "https://qiita.com/api/v2/items"; // アクセスするAPI
var path = "body.json"; // payload for POST request
var body = Files.readString(Paths.get(path));
var token = "Qiita APIのアクセストークン(別途発行)";

// System.out.println(body);

var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder(URI.create(url)).header("Content-Type", "application/json").header("Authorization", "Bearer " + token).POST(HttpRequest.BodyPublishers.ofString(body)).build();

var response = client.send(request, HttpResponse.BodyHandlers.ofString());

System.out.println(response.body());

/ex

基本的には、Javaのコードを順番に並べてあるだけです。
最後の「/ex」は、JShellで外部ファイルを読み込んで実行するとき、最後にJShellを抜けるための命令文です。
var request~の行がとても長くなっていますが、途中で改行を入れるとうまくいかないのでこのような形にしています。

リクエストのボディは以下のようなファイルです。

{
  "body": "# Example",
  "coediting": false,
  "private": true,
  "tags": [
    {
      "name": "Ruby",
      "versions": [
        "0.0.1"
      ]
    }
  ],
  "title": "Example title",
  "tweet": false
}

実行してみる

アクセストークンの発行

Qiitaのアカウント画面で、「設定」を選択し、

image.png

今回は記事投稿なので、「read_qiita」「write_qiita」のスコープにチェックを入れ、「発行する」をクリックします。次の画面で(1度だけ)表示されるアクセストークンをメモし、上記プログラム内の「var token」の値として貼り付けます。

image.png

実行

何らかのターミナルにて、保存したコード(例:"access-webapi.jshell")と、上記のリクエスト用のボディ(例:"body.json")を同じディレクトリに置き、これらのファイルを格納しているディレクトリにて、以下のように実行します。

jshell access-webapi.jshell

コンソールに、レスポンスのボディが表示されます。

{"rendered_body":"\u003ch1 data-sourcepos=\"1:1-1:9\"\u003e\n\u003cspan (以降略)}

Qiitaの自分の記事の「限定共有記事」に、新しい記事が1つできています。

おわりに

本記事では、JShellで、REST APIにPOSTアクセスする例を紹介しました。
このようなものが役に立つケースはかなりレアだと思いますが、こういうこともできますね、という例としてやってみた内容です。

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?