From 2210b5a21023658ef3b36c8675c54e5043cf0d32 Mon Sep 17 00:00:00 2001
From: Jueun Park <s5616012@mailbox.tu-dresden.de>
Date: Thu, 31 Mar 2022 13:36:52 +0900
Subject: [PATCH] Edited index.md
---
pages/docs/index.md | 23 +++++++++++++++++------
1 file changed, 17 insertions(+), 6 deletions(-)
diff --git a/pages/docs/index.md b/pages/docs/index.md
index 7a6e72b0..d81ed720 100644
--- a/pages/docs/index.md
+++ b/pages/docs/index.md
@@ -5,19 +5,19 @@
`RAGO` is the first REST API fuzzing tool modeled in [JastAdd](https://jastadd.cs.lth.se/).
-First of all, This tool parses [an OpenAPI specification (OAS)](https://swagger.io/specification/) in Java classes and transfers it into JastAdd Objects. These Objects are able to be re-transformed and saved in JSON which describes its API Specification, if needed.
+First of all, This tool parses [an OpenAPI specification (OAS)](https://swagger.io/specification/) in Java classes and transfers it into `AST-Node`. These Nodes are able to be re-transformed and saved in JSON which describes its API Specification, if needed.

-After the parsing phase, `RAGO` is prepared to generate tests automatically in two different ways based on Fuzzing, `Random Testing` and `Parameter Inference`.
+After the parsing phase, `RAGO` is prepared to generate tests automatically in two different ways based on Fuzzing, [Random Testing](#ragoRandTest) and [Parameter Inference](#ragoParamInf).
## OpenAPI Specification in JastAdd
-[OpenAPI specification (OAS)](https://swagger.io/specification/) defines a standard, language-agnostic interface to RESTful APIs which allows both humans and computers and is represented in JSON or YAML. Consequently, it is able to use OAS in Java, following in JastAdd.
+[OpenAPI specification (OAS)](https://swagger.io/specification/) defines a standard, language-agnostic interface to RESTful APIs which allows both humans and computers and is represented in JSON or YAML. It consists of 30 objects and is structured in a tree-shape.
-To understand better how OpenAPI documentations could be transformed in JastAdd, compare the following part of the JastAdd-grammar and [OpenAPI Object description](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#oasObject)
+To understand better how OpenAPI documentations could be transformed in JastAdd, compare the following Object in the JastAdd-grammar and [OpenAPI Object description](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#oasObject)
```
OpenAPIObject ::= <OpenAPI> <JsonSchemaDialect> I:InfoObject Serv:ServerObject*
P:PathsObject* W:Webhook* C:ComponentsObject Sr:SecurityRequirementObject*
@@ -25,8 +25,19 @@ OpenAPIObject ::= <OpenAPI> <JsonSchemaDialect> I:InfoObject Serv:ServerObject
```

+
+There are some implementation details developers must consider:
+- JastAdd doesn't support `Map`. So, it must be constructed in a tuple (AST-Node). e.g. `ServerVariablesTuple ::= <Name> S:ServerVariableObject;` <-> `variables` in [Server Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#serverObject)
+- In OAS, several objects can be replaced by [Reference Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#referenceObject). In `RAGO`, we implemented this structure in an abstract node to every concerned object. e.g. [Parameter Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#parameterObject)
+ ```
+ abstract ParameterOb;
+ ParameterReference : ParameterOb ::= <Ref> ...;
+ ParameterObject : ParameterOb ::= <Name> <In> ...;
+ ```
+- Most objects can be extended with `Extension` containing unfixed name and values. In JastAdd, this is also implemented in a tuple (AST-Node) `Extension ::= <Key> <Value:Object>;`
+
## Fuzzing Methods
-### Random Testing
+### <a name="ragoRandTest"></a>Random Testing
-### Parameter Inference
\ No newline at end of file
+### <a name="ragoParamInf"></a>Parameter Inference
\ No newline at end of file
--
GitLab