85

だから私は私が書いているAPIによって返されるjsonのフォーマットを文書化しようとしています、そして私はjson構造の文書化のための一般的なフォーマットがあるかどうか知りたいです。

私は何かをテストまたは検証しようとしているのではなく、ドキュメント化のためにこれを使用しているだけであることに注意してください。また、非定数(常に同じ値で返されるアイテム)にコメントを追加するいくつかの方法があれば便利です。

これは私が現在使用している完全に考え抜かれたスキームではありません:

Plain names refer to identifiers or types.
Some types have type-comment
Strings that appear to be constant(always returned for that type of request) strings are "str"
Constant Numbers would be just the number
Constant null is null
Booleans are true/false for constant booleans or Boolean otherwise
[a,b,c] are lists with 3 items a,b,c
[...  ...] is a list of repeating elements of some types/constants/patterns
{a:A,b:B,c:c} and {... ...}  is the same for a dictionary.

例:

story          := [header,footer]
header         := {"data":realHeader,"kind":"Listing"}
realHeader     := {"after": null, "before": null, "children": [{"data": realRealHeader, "kind": "t3"}], "modhash": ""}
footer         := {"data":AlmostComments,"kind":"Listing"}
AlmostComments := {"data": {"after": null, "before": null, "children": comments, "modhash": ""}, "kind": "t1"}
comments       := [...{"data":comment, "kind":"t1"}...]

realRealHeader :=
{"author": string,
"clicked": boolean,
"created": int,
"created_utc": int,
"domain": "code.reddit.com",
"downs": int,
"hidden": boolean,
"id": string-id,
"is_self": boolean,
"levenshtein": null,
"likes": null,
"media": null,
"media_embed": { },
"name": string-id,
"num_comments": int,
"over_18": false,
"permalink": string-urlLinkToStoryStartingFrom/r,
"saved": false,
"score": int,
"selftext": string,
"selftext_html": string-html,
"subreddit": string-subredditname,
"subreddit_id": string-id,
"thumbnail": "",
"title": string,
"ups": int,
"url": "http://code.reddit.com/"
}


comments := {
"author": string,
"body": string-body_html-wout-html,
"body_html": string-html-formated,
"created": int,
"created_utc": int,
"downs": int,
"id": string-id,
"levenshtein": null,
"likes": null,
"link_id": string-id,
"name": string-id",
"parent_id": string-id,
"replies": AlmostComments or null,
"subreddit": string-subredditname,
"subreddit_id": string-id,
"ups": int
}
4

7 に答える 7

40

理論的にはJSONスキーマがこの目的を果たすことができますが、実際にはそれが役立つかどうかはわかりません。言及する価値があります。

これ以外に、私の個人的な意見では、JSONは主にオブジェクトの転送に使用されるため、同等のオブジェクトを言語クライアントの使用(Java、C#、さまざまなスクリプト言語)で文書化するのが最も理にかなっています-結局のところ、そのようなオブジェクトは通常、マップ/バインドされますJSONに戻します。そして、Javadoc for Java(Perldoc for Perl、Oxygen for c ++など)など、利用可能なドキュメントツールを使用できます。

インターフェイスを指定するために、WADL(Webアプリ記述言語)もあります。これは役立つ場合があります。

于 2011-01-06T22:20:10.850 に答える
15

JSONからHTMLドキュメントを生成する方法:

Jsonスキーマを生成する必要があります。元のJSONを貼り付けて、スキーマを自動生成できるこのサービスがあります。

http://www.jsonschema.net/

スキーマが手元にあれば、Maticを使用してHTMLドキュメントを自動生成できます。

https://github.com/mattyod/matic

HTMLの生成

Maticをインストールするには、Node.jsをインストールする必要があります:http: //nodejs.org/

Windowsでは、CMDを実行します

次のコマンドを実行してJadeをインストールします。 npm install -g jade

GithubからダウンロードしたMaticフォルダーを開きます。 cd PATH_TO_FOLDER/matic

インストールコマンドを実行します。 npm install -g

ドキュメントのサンプルプロジェクトをダウンロードします: https ://github.com/mattyod/matic-simple-example

スキーマを「schemas」フォルダに入れます

プロジェクトフォルダを開きます。 cd PATH_TO_PROJECT_FOLDER

コマンドを実行します: matic

成功メッセージが表示されます。 Documentation built to ./web/

于 2013-04-11T18:09:58.597 に答える
8

なぜJSONを文書化しようとしているのかわかりませんが、IDEまたは開発者に表記のデータ型を伝える一貫した方法を見つけようとしていると推測できます。

jsdoc(http://jsdoc.sourceforge.net/#usage)はあなたが探しているものかもしれません。

例えば:

{
   /**
     * Name of author
     * @type String
     */
   "author": null, 
   /**
     * has the author been clicked
     * @type Boolean
     */
   "clicked": null, 
   /**
     * Unix Timestamp of the creation date
     * @type Int
     */
   "created": null
}

または、データの構造をデモンストレーションしようとしている場合。YAML(http://www.yaml.org/)を見ることができます。これは、人間が読み取れるシリアル化形式になるように設計されており、データ構造の文書化に適している可能性があります。

簡単な例:

Author:
  name: String
  clicked: Boolean
  created: Integer
于 2011-01-10T22:51:37.227 に答える
5

各JSONチャンクの深さが1レベルまたは2レベルしかない単純なAPIの場合、例を示して文書化するのが一般的な方法のようです。

しかし、あなたのようなより複雑なデータモデルの場合、私は良い解決策を見たことがありません。いくつかのJSONスキーマの提案がありますが、それはJSONの精神に反しているようであり、単に文書化するという目的には重すぎるようです。

個人的には、あなたの計画はとても良いと思います。オプションのセクションと代替セクションを処理するためのいくつかの小さな拡張機能を使用すると、Backus-Naurフォームと同じように表現力があり、非常に読みやすく、理解しやすく、JSONの精神に沿っていると思います。この「TaycherJSON文法フォーム」(TJGF)を使用するために、他の人に遅れをとることができるかもしれません。

于 2011-10-10T20:39:59.230 に答える
3

サンプルのJSON応答を記述し、MarkdownとDoccoを使用してそれを文書化することができます。Doccoは、わかりやすいHTMLベースのドキュメントを出力します。

于 2011-01-11T22:33:52.567 に答える
3

APIを構築していないように見えるため、この場合は役に立たない可能性があります。

ただし、その場合、JavaまたはJVM(JAX-RS)を使用している場合は、Swaggerを使用できたはずです。

APIをJSON表現(WSDL / WADLなど)で記述することができます。また、APIのJSON表現を読み取るIHMレイヤーを提供します。これがあなたが得るものです:http://petstore.swagger.wordnik.com/

https://developers.helloreverb.com/swagger/

于 2013-04-24T10:56:00.953 に答える
2

シンプルですが効果的な方法は、JSONスキーマジェネレーターを使用してJSONスキーマを作成し、PythonユーティリティであるJSON SchemaforHumansを使用してhtmlインタラクティブドキュメントを作成することです。

pip install json-schema-for-humans
generate-schema-doc [OPTIONS] SCHEMA_FILE [RESULT_FILE]

役立つ参考資料:

  1. pypijson-schema-for-humansページ
  2. 出力のいくつかの視覚的な例を含むjson-schema-for-humansドキュメント

将来的にIETF標準になることを目指して、JSONスキーマは現在もドラフト状態であることに注意してください。

于 2020-05-28T08:37:20.637 に答える