回答編集履歴

3

書き直し

2021/05/30 10:35

投稿

attakei
attakei

スコア2740

test CHANGED
@@ -1,25 +1,33 @@
1
- HTTPステタス 415解消に関しだと推測寄りになのでが、
1
+ (手元でコ確認とかを改め行いごと書き換えてま)
2
-
3
- 公式サイト上のAPI利用例や外部の人が公開しているAPIクライアントライブラリの実装を見る限り、API側で`Content-Type`を厳密に見ているような気がします。
4
2
 
5
3
 
6
4
 
7
-
8
-
9
- ```diff
5
+ ## コードについて
10
-
11
- -myHeaders.append('Content-Type', 'application/json; charset=UTF-8');
12
-
13
- +myHeaders.append('Content-Type', 'application/json');
14
-
15
- ```
16
6
 
17
7
 
18
8
 
19
- MIME部分だけなく、ヘッダーの値全体での比較をしているなら
9
+ もとコードをブラウザ動作されるように実行するとJDoodleへのAPI呼び出し時のリクエストヘッダーが`text/plain`になっています。
20
10
 
21
- 上記ように`Content-Type`から`charset`部分を消せば動く可性はありそうです。
11
+ これは、Fetch APIにおける`mode: no-cors`条件を満たさなくなるため`myHeader`での`Content-Type`の上書きが機していないためだと思います。
22
12
 
23
13
 
24
14
 
25
- ※[Node製のクライアントライブラリ実装例](https://github.com/wrepl/jdoodle/blob/main/src/index.ts)
15
+ ※[MDNより](https://developer.mozilla.org/ja/docs/Web/API/Fetch_API/Using_Fetch#supplying_request_options)
16
+
17
+
18
+
19
+ ## 目的について
20
+
21
+
22
+
23
+ > ブラウザで利用できる簡易オンラインコンパイラを作りたい。
24
+
25
+
26
+
27
+ 上記理由により、Fetch APIで直接APIコールするのは不可能と考えたほうが良さそうです。
28
+
29
+ (一泊おいて考えたら、ID/Secretを両方使用してコールする機能をブラウザ上で実行出来るのはアカウント利用者側にとっての不利益も大きいし、塞がれてて然るべきではあります)
30
+
31
+
32
+
33
+ もし仮に、静的HTML以外の手段を取れるのであれば、バックエンドで「JDoodle APIをコールして」「結果を中継する」ようなAPIを1個だけ自作するような形式で、簡易的なWebアプリとして実装する必要があります。

2

参考情報を追加

2021/05/30 10:35

投稿

attakei
attakei

スコア2740

test CHANGED
@@ -19,3 +19,7 @@
19
19
  MIMEの部分だけでなく、ヘッダーの値全体での比較をしているなら
20
20
 
21
21
  上記のように`Content-Type`から`charset`の部分を消せば動く可能性はありそうです。
22
+
23
+
24
+
25
+ ※[Node製のクライアントライブラリ実装例](https://github.com/wrepl/jdoodle/blob/main/src/index.ts)

1

回答の対象スコープを追記

2021/05/30 10:04

投稿

attakei
attakei

スコア2740

test CHANGED
@@ -1,4 +1,6 @@
1
+ HTTPステータス 415の解消に関してだと、推測寄りになるのですが、
2
+
1
- 推測寄りになるのですが、公式サイト上のAPI利用例や外部の人が公開しているAPIクライアントライブラリの実装を見る限り、API側で`Content-Type`を厳密に見ているような気がします。
3
+ 公式サイト上のAPI利用例や外部の人が公開しているAPIクライアントライブラリの実装を見る限り、API側で`Content-Type`を厳密に見ているような気がします。
2
4
 
3
5
 
4
6