`openapi-genrator`の`dart-dio-next`で生成したコードでリクエストパラメーターを生成してPOSTリクエストを行う
書くこと
- openapi-generatorのdart-dio-nextで生成したコードでリクエストパラメーターを生成する
- 生成したリクエストパラメーターを使いPOSTリクエストを行う
- 上記の周辺コードの解説
書かないこと
- APIのパスを定義した完全なOpenAPI定義について
- openapi-generatorの実行環境について
- OpenAPIについて
前提条件
OAS
- APIのパスを定義した完全なOpenAPI定義について
- openapi-generatorの実行環境について
- OpenAPIについて
前提条件
OAS
OASは以下のようにユーザ情報をpostで作成する定義したが存在するとします。
post:
tags:
- Users
summary: Create user
operationId: postUser
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/user'
responses:
'200':
description: "OK"
components:
schemas:
user:
type: object
required:
- name
- email
properties:
name:
type: string
example: mike
description: user name
email:
type: string
format: email
example: [email protected]
description: mail addrress
dartパッケージの自動生成
以下のように-g
オプションの値にdart-dio-next
を指定してopenapi-generator
のgenerate
を 実行します。
openapi-generator generate \
-i workspace/openapi/openapi.yml \
-g dart-dio-next \
-o workspace/dio_client \
--additional-properties=disallowAdditionalPropertiesIfNotPresent=false,pubName=dio_client,pubLibrary=dio_client
dio_client
に移動してbuild_runner
を実行させます。
※手元にdart
のランタイムが入っていないのでflutter
コマンドで実行しています。
cd dio_client
flutter pub get
flutter packages pub run build_runner build
生成されたソースコードの確認
dio_client/
パッケージが作成されます
$ tree dio_client/lib
dio_client/lib
├── dio_client.dart
└── src
├── api
│ └── users_api.dart
├── api.dart
├── api_util.dart
├── auth
│ ├── api_key_auth.dart
│ ├── auth.dart
│ ├── basic_auth.dart
│ ├── bearer_auth.dart
│ └── oauth.dart
├── date_serializer.dart
├── model
│ ├── date.dart
│ ├── user.dart
│ └── user.g.dart
├── serializers.dart
└── serializers.g.dart
実際にリクエストを送るために使用する部分は以下の二つです。
-
dio_client/lib/src/api/users_api.dart
に定義されているpostUser
-
dio_client/lib/src/model/user.dart
に定義されているUser
class
dio_client/lib/src/api/users_api.dart
Future<Response<void>> postUser({
required User user,
CancelToken? cancelToken,
Map<String, dynamic>? headers,
Map<String, dynamic>? extra,
ValidateStatus? validateStatus,
ProgressCallback? onSendProgress,
ProgressCallback? onReceiveProgress,
})
dio_client/lib/src/model/user.dart
abstract class User implements Built<User, UserBuilder> {
/// user name
@BuiltValueField(wireName: r'name')
String get name;
/// mail addrress
@BuiltValueField(wireName: r'email')
String get email;
User._();
@BuiltValueHook(initializeBuilder: true)
static void _defaults(UserBuilder b) => b;
factory User([void updates(UserBuilder b)]) = _$User;
@BuiltValueSerializer(custom: true)
static Serializer<User> get serializer => _$UserSerializer();
}
使い方
-
postUser
は引数にUser
が必要なのでuser
を作成します。
-
User
classのコンストラクタは引数にUserBuilder
関数を受け取るので、関数を使用して値の初期化を行います。
- 生成された
DioClient
からusers
のAPIクライアントを取得してpostUser
を呼び出します。
final User user = User(
(UserBuilder b) => {
b.name = "mike",
b.email = "[email protected]"
}
)
DioClient.getUsersApi().postUser(user)
環境
- openapi-generator-cli v5.3.1
- Dart SDK version: 2.16.0
postUser
は引数にUser
が必要なのでuser
を作成します。User
classのコンストラクタは引数にUserBuilder
関数を受け取るので、関数を使用して値の初期化を行います。DioClient
からusers
のAPIクライアントを取得してpostUser
を呼び出します。final User user = User(
(UserBuilder b) => {
b.name = "mike",
b.email = "[email protected]"
}
)
DioClient.getUsersApi().postUser(user)
- openapi-generator-cli v5.3.1
- Dart SDK version: 2.16.0
Author And Source
この問題について(`openapi-genrator`の`dart-dio-next`で生成したコードでリクエストパラメーターを生成してPOSTリクエストを行う), 我々は、より多くの情報をここで見つけました https://qiita.com/SoarTec-lab/items/e790ae63abb4839ff817著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .