SAP BTP 学習日記 Day6 —— api.sap.com サンドボックス API 接続 & Destination Service 入門
今回の学習内容
今日は、SAP の公式 API カタログ(api.sap.com)を使ったサンドボックス API の確認から、CAP Java アプリでの実際のデータ取得、そして BTP Cockpit での Destination 設定までを学習しました。
① api.sap.com とは
SAP が公式に提供する API カタログです。S/4HANA をはじめ、SAP 製品の標準 API がすべて公開されています。
| 機能 | 内容 |
|---|---|
| API Reference | エンドポイント・パラメータ・レスポンスの確認 |
| Schema View | データ構造の確認 |
| Try Out | サンドボックス環境で API を実際に叩ける |
| API Key | サンドボックス用の認証キー(無料で取得可能) |
② Sales Order A2X API の確認
S/4HANA の受注データを操作する標準 API です。ABAP の VBAK/VBAP テーブルに対応しています。
GET /SalesOrder ← 受注一覧取得(VBAK)
POST /SalesOrder ← 受注作成
GET /SalesOrder/{SalesOrder} ← 1件取得
PATCH /SalesOrder/{SalesOrder} ← 受注更新
GET /SalesOrder/{SalesOrder}/_Item ← 明細取得(VBAP)
POST /SalesOrder/{SalesOrder}/_Item ← 明細追加| API フィールド | ABAP テーブル | 意味 |
|---|---|---|
SalesOrder | VBAK-VBELN | 受注番号 |
SalesOrderType | VBAK-AUART | 受注種別 |
SoldToParty | VBAK-KUNNR | 受注先 |
TotalNetAmount | VBAK-NETWR | 正味金額 |
③ CAP Java から SAP サンドボックス API を呼び出す
Spring Boot の RestTemplate を使って api.sap.com のサンドボックス API を呼び出します。
SalesOrderService.java
@Service
public class SalesOrderService {
private static final String SANDBOX_URL =
"https://sandbox.api.sap.com/s4hanacloud/sap/opu/odata4/sap/" +
"api_salesorder/srvd_a2x/sap/salesorder/0001/SalesOrder";
private static final String API_KEY = "your-api-key";
public String getSalesOrders() {
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.set("APIKey", API_KEY);
headers.set("Accept", "application/json");
HttpEntity<String> entity = new HttpEntity<>(headers);
ResponseEntity<String> response = restTemplate.exchange(
SANDBOX_URL + "?$top=3&$select=SalesOrder,SalesOrderType,SoldToParty",
HttpMethod.GET,
entity,
String.class
);
return response.getBody();
}
}SalesOrderController.java
@RestController
@RequestMapping("/api")
public class SalesOrderController {
@Autowired
private SalesOrderService salesOrderService;
@GetMapping(value = "/salesorders", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> getSalesOrders() {
String result = salesOrderService.getSalesOrders();
return ResponseEntity.ok()
.contentType(MediaType.APPLICATION_JSON)
.body(result);
}
}Bruno で確認:
GET http://localhost:8080/api/salesorders
→ S/4HANA サンドボックスの受注データが JSON で返ってくる!④ トラブルシューティング
| エラー | 原因 | 解決方法 |
|---|---|---|
| Property 'NetAmount' not found | A2X API ではフィールド名が異なる | NetAmount → TotalNetAmount |
| Invalid name start character '@' | OData の @odata.context を Map で受け取れない |
Map の代わりに String で受け取る |
⑤ Destination Service とは
BTP 上で接続先の URL・認証情報を一元管理する仕組みです。コードに URL やパスワードを直書きしなくて済みます。
❌ 良くない書き方(ローカル開発のみ)
private static final String API_KEY = "ハードコード";
private static final String URL = "https://...ハードコード";
✅ 正しい書き方(本番環境)
// コードには Destination 名だけ書く
// URL・認証情報は BTP Cockpit で管理| 環境 | 接続方法 | 用途 |
|---|---|---|
| ローカル開発 | RestTemplate + ハードコード | 開発・テスト |
| BTP 本番環境 | Destination Service 経由 | 本番デプロイ |
| オンプレミス S/4HANA | Cloud Connector + Destination | 社内システム連携 |
⑥ BTP Cockpit で Destination を作成
BTP Cockpit → サブアカウント → コネクティビティ → 宛先 → 作成 の手順で作成しました。
| 項目 | 値 |
|---|---|
| 名前 | S4HANA_SANDBOX |
| タイプ | HTTP |
| URL | https://sandbox.api.sap.com/s4hanacloud |
| プロキシタイプ | Internet |
| 認証 | NoAuthentication |
⑦ 会社環境での API 作成方法
標準 API がない場合、ABAP RAP(RESTful Application Programming)で カスタム OData V4 API を作ります。SE38 ではなく Eclipse + ADT を使います。
① まず api.sap.com で標準 API を探す(8割はここで解決)
↓ なければ
② BASIS に Communication Arrangement の設定を依頼
↓ カスタム要件があれば
③ ABAP 開発者が ADT で CDS + RAP を作成
↓
④ BTP の Destination に URL・認証情報を登録
↓
⑤ CAP Java から Destination 経由で呼び出すこの記事は「SAP BTP 学習」シリーズの第6回です。6ヶ月間の独学で SAP BTP 開発へのキャリアチェンジを目指しています。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 TKblog
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果