swagger编辑器生成不会POST的typescript客户端

时间:2016-10-26 20:51:21

标签: angular typescript swagger swagger-ui swagger-editor

我使用位于http://editor.swagger.io的Swagger编辑器生成了一个Angular2打字稿客户端。虽然POST端点永远不会被发送到服务器,但API适用于所有类型为POST的api端点。

到达生成的typescript中的以下方法,console.log语句显示正在设置标头,但实际上没有POST到服务器。

这表明this.http.request电话有问题。

public snapshotsFoo (data: Array<number>, extraHttpRequestParams?: any ) : Observable<models.Snapshot> {
    const path = this.basePath + '/Snapshots/foo';

    let queryParameters = new URLSearchParams();
    let headerParams = this.defaultHeaders;
    headerParams.set("Content-Type", "application/json");
    // verify required parameter 'data' is not null or undefined
    if (data === null || data === undefined) {
        throw new Error('Required parameter data was null or undefined when calling snapshotsFoo.');
    }
    let requestOptions: RequestOptionsArgs = {
        method: 'POST',
        headers: headerParams,
        search: queryParameters
    };
    requestOptions.body = JSON.stringify(data);

    console.log('I am in foo', path, requestOptions);

    return this.http.request(path, requestOptions)
        .map((response: Response) => {
            if (response.status === 204) {
                return undefined;
            } else {
                return response.json();
            }
        });
}

我可以成功地使用来自swagger ui(http://0.0.0.0:5000/api/ui),POSTman和$ curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '[7,7,8]' 'http://0.0.0.0:5000/api/Snapshots/foo'

命令行的端点

虽然,当我尝试使用生成的打字稿到达此端点时,没有任何内容发布到服务器并且不会抛出任何错误。

2 个答案:

答案 0 :(得分:0)

出于某种原因,http observable在实际发布之前收集了垃圾(从我可以看到)。

我的组件中的破碎情况:

...
this.snapshotApi.snapshotsFoo([6,7,8]);
...

我的组件中的固定情况:

...
let whocares = this.snapshotApi.snapshotsFoo([6,7,8]);

whocares.subscribe(res => {
    console.log('i dont even');
}

随意评论一下到底发生了什么。邮寄到我的服务器现在有效。观察改变行为......

答案 1 :(得分:0)

我也有这个问题,我无意中忘了订阅我的api电话。我从Rx documentation发现:

  

如果Observable在观察者订阅之前没有开始发射物品,则称其为“冷”Observable;如果Observable可以在任何时间开始发出物品,则它被称为“热”Observable,并且订户可以在其开始之后的某个时刻开始观察所发射物品的序列,从而错过了在订阅之前发射的任何物品。

在这种情况下,HttpClient返回一个observable,它允许我们在序列中添加更多动作,因此是一个“冷”。可观察的,只有在订阅时才会被触发。