他のスペースに属したアプリを参照したい。

他のスペースに属したアプリ(マスタ関連)を参照したいのですが、以下を参考にしておりますが、最終的な記載方法がわかりません。

https://developer.cybozu.io/hc/ja/community/posts/5090516353689-%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%E3%81%A7%E3%81%AA%E3%81%84%E9%9D%9E%E5%85%AC%E9%96%8B%E3%82%B9%E3%83%9A%E3%83%BC%E3%82%B9%E5%86%85%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9

現行のソースは下記のように同じスペース内に参照したいアプリ(99)を配置しているのですが、別のスペースにアプリ(99)を配置したく書き方に頓挫しております。

const body = {
          'app': 99,     
          'query': 'cod = ' + 'a',
          'fields': ['cod', 'name'],
          'totalCount': 'true'
        };

         const resp = await kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', body);

 

様々な情報から以下のヘッダー情報を追加し➀の記載方法を変更すれば可能ではないかと考えておりますが、具体的な記載の仕方に頓挫しております。

const headers = {
     'X-Cybozu-API-Token':'xxxxx11111',
     'Content-Type': 'application/json'
     };

       ➀const resp = await kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', body);

  アドバイスお願いできませんでしょうか。

マル様

javascript内にトークン情報を入れることは,あまり推奨されない(トークン情報が見られるリスク)ようですが,同じようなやり取りが下記にありました.
APIトークンを使ったレコードの更新について

スペース内アプリだからAPIトークンが必要なのではなく,スペースにアクセスできる人を制限しているが,アプリへのアクセスは制限したくない,という場合に利用する手段の一つのようです.
その点を考慮した上で参考にしていただければ良いかと思います.

TO様

早々のご指導ありがとうございました。

TO様おっしゃられる通りセキュリティ上、リスクが生じることは認識しており、懸念しなければならないことは十分承知しております。

今回のスペースを超えたアプリを参照したいと思った動機は、kintoneのホームには自分が属するスペースにあるアプリ一覧が表示されます。

そのアプリ一覧に参照するアプリ(特にマスタデータ関連)はなるべく表示させたくないと考えております。

ユーザーが利用するアプリからは結果的にマスタデータを参照しているのであるから、参照されるデータを見せても問題はないと言えばそうなのですが、アプリの一覧からは直接的に取り扱わないマスタデータのアプリ(マスタデータは管理者が用意している)をできれば見えないようにしたいのですが、アプリ一覧に表示しないようにするためには、ユーザーが属さないスペースにアプリを置く必要がある、しかし、別スペースにある為参照できない。

と言うジレンマに陥っております。

本来のアクセスを制御するためのスペース利用の考え方であることは承知したうえで、もし可能であれば別アプリへの参照方法

現行記述しているconst resp = await kintone.api(kintone.api.url(‘/k/v1/records.json’, true), ‘GET’, body);を具体的にどのように記述したらよいか知りたいと思っております。

 

マル様

リスクを承知とのこと,了解しました.
先ほどのコメントに貼ったリンク内のコード丸写しですが,ここに書き方があると思います.

(function() {
"use strict";
kintone.events.on(["app.record.edit.show"],function(event){
var url = 'https://サブドメイン名.cybozu.com/k/v1/record.json';
var headers = {
'X-Cybozu-API-Token':'トークンの情報',
'Content-Type': 'application/json'
};
var param = {
"app" : kintone.app.getId(),
"id" : kintone.app.record.getId(),
"record": {
"依頼番号": {
"value": moment().format("YY-MMDD-HHmmss")
}
}
};
_**kintone.proxy(url, 'PUT', headers, param,** **function(body, status, headers)**_{
console.log(status, JSON.parse(body), headers);
}, function(error) {
console.log(error);
});
});
})();

上記コードの斜線部分(kintone.proxy~)が該当するのではないでしょうか.

TO様

コメントありがとうございました。

参考に試行錯誤しながらテストしておりますが、基本知識も少ないことが問題ではありますが、現行のsync/awaitを絡めた書き方で以下実行しましたが、respに該当レコードが入手できておりません。

問題個所をご指摘いただければ助かります。

var url = 'https://サブドメイン名.cybozu.com/k/v1/records.json';
          
const headers = {
       'X-Cybozu-API-Token':'xxxxx11111',
       'Content-Type': 'application/json'
       };
       
const body = {
     'app': 99,     
     'query': 'cod = ' + 'a',
     'fields': ['cod', 'name'],
     'totalCount': 'true'
     };

const resp = await kintone.proxy(url, 'GET', headers, body);

console.log(resp);

 

respをコンソールログに表示した内容です。

マル様

developer Network内の下記リンクも参照ください.
外部APIの実行(kintone.proxyについて書かれています)

リンク先によると,GETの場合はマル様の記述されているbodyは無効のようです.
GETではurlのQueryStringにパラメータを載せるようです.
QueryStringにパラメータを載せた例が下記にあったので,参照ください.
https://potara.net/2020/12/16/1440/ 

 

TO様

コメントありがとうございました。

教えていただきましたサイトを参考に修正した結果、参照可能となりました。

ありがとうございました、感謝申し上げます。

運用するかどうかは、セキュリティ等勘案し考えてみます。

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。