{"id":15014226,"url":"https://github.com/tangcent/easy-api","last_synced_at":"2026-06-08T00:01:55.665Z","repository":{"id":34696962,"uuid":"178507492","full_name":"tangcent/easy-api","owner":"tangcent","description":"IntelliJ plugin that generates API documentation and runnable requests from Java/Kotlin code, with export to Postman, Markdown,   cURL, and HTTP Client.","archived":false,"fork":false,"pushed_at":"2026-05-07T14:31:02.000Z","size":26833,"stargazers_count":226,"open_issues_count":1,"forks_count":35,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-05-07T16:38:44.499Z","etag":null,"topics":["idea-plugin","postman"],"latest_commit_sha":null,"homepage":"https://easyapi-web.github.io/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tangcent.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-03-30T03:39:50.000Z","updated_at":"2026-05-07T13:49:45.000Z","dependencies_parsed_at":"2024-04-22T01:26:21.995Z","dependency_job_id":"e7974643-cebc-4ad4-80f3-a2283d030737","html_url":"https://github.com/tangcent/easy-api","commit_stats":null,"previous_names":[],"tags_count":129,"template":false,"template_full_name":null,"purl":"pkg:github/tangcent/easy-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangcent%2Feasy-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangcent%2Feasy-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangcent%2Feasy-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangcent%2Feasy-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tangcent","download_url":"https://codeload.github.com/tangcent/easy-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tangcent%2Feasy-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32920398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-11T17:09:15.040Z","status":"online","status_checked_at":"2026-05-12T02:00:06.338Z","response_time":102,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["idea-plugin","postman"],"created_at":"2024-09-24T19:45:20.902Z","updated_at":"2026-05-12T02:02:43.203Z","avatar_url":"https://github.com/tangcent.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EasyApi\n\n[![CI](https://github.com/tangcent/easy-api/actions/workflows/ci.yml/badge.svg)](https://github.com/tangcent/easy-api/actions/workflows/ci.yml)\n[![codecov](https://codecov.io/gh/tangcent/easy-api/branch/master/graph/badge.svg?token=4DPGLAWL3Q)](https://codecov.io/gh/tangcent/easy-api)\n[![](https://img.shields.io/jetbrains/plugin/v/12211?color=blue\u0026label=version)](https://plugins.jetbrains.com/plugin/12211-easyapi)\n[![](https://img.shields.io/jetbrains/plugin/d/12211)](https://plugins.jetbrains.com/plugin/12211-easyapi)\n\n\u003e **Note:** This is the v3.0 rewrite of EasyApi. For the source code of stable v2.x releases, see the [`stable/v2.x.x`](https://github.com/tangcent/easy-api/tree/stable/v2.x.x) branch.\n\nAn IntelliJ IDEA plugin for API development — export API documentation, send requests, and manage endpoints directly from your code.\n\n## Features\n\n### API Export\n\nExport API endpoints from your source code to multiple formats:\n\n| Format | HTTP | gRPC | Output |\n|--------|:----:|:----:|--------|\n| **Markdown** | ✓ | ✓ | `.md` documentation file |\n| **Postman** | ✓ | — | JSON file or direct upload to Postman |\n| **cURL** | ✓ | ✓ | Executable shell script |\n| **HTTP Client** | ✓ | ✓ | IntelliJ HTTP Client scratch file |\n\n### API Dashboard\n\nA built-in tool window that provides a tree view of all API endpoints in your project:\n\n- Browse endpoints organized by module and class\n- Search and filter endpoints by path, name, or HTTP method\n- View endpoint details (parameters, headers, body, response)\n- Send HTTP requests directly from the dashboard\n- Navigate to source code with a single click\n- Edit request parameters with auto-persistence\n\n### Send API Requests\n\nCall any API endpoint directly from the editor:\n\n- Right-click a controller method → **Call** (or press `Ctrl+C` on macOS / `Alt+Shift+C`)\n- The API Dashboard opens and navigates to the selected endpoint\n- Edit parameters, headers, and body before sending\n- View response with syntax highlighting\n\n### API Search Everywhere\n\nFind API endpoints from anywhere in the IDE using IntelliJ's **Search Everywhere** (`Double Shift`):\n\n- Search by HTTP method prefix (e.g., `GET /users`)\n- Search by path, endpoint name, class name, or description\n- Click a result to navigate directly to the source method\n\n### Gutter Icons\n\nAPI methods are marked with a gutter icon in the editor. Click it to open the endpoint in the API Dashboard.\n\n### Field Conversion\n\nConvert class fields to various formats:\n\n- **To JSON** — Standard JSON with default values\n- **To JSON5** — JSON5 format with comments support\n- **To Properties** — Java `.properties` format\n\n## Supported Frameworks\n\n| Category | Supported |\n|----------|-----------|\n| **Languages** | Java, Kotlin, Scala (optional) |\n| **Web Frameworks** | Spring MVC, Spring Cloud OpenFeign, JAX-RS (Quarkus / Jersey) |\n| **RPC** | gRPC |\n| **Validation** | javax.validation / Jakarta Validation |\n| **Serialization** | Jackson, Gson |\n| **API Docs** | Swagger / OpenAPI annotations |\n| **Spring Actuator** | Actuator endpoints |\n\n### Spring MVC\n\nFull support for Spring MVC annotations:\n\n- `@RequestMapping`, `@GetMapping`, `@PostMapping`, `@PutMapping`, `@DeleteMapping`, `@PatchMapping`\n- `@RequestParam`, `@PathVariable`, `@RequestBody`, `@RequestHeader`, `@CookieValue`\n- `@RestController`, `@Controller`\n- Class-level and method-level mapping composition\n- Generic type resolution for parameterized controllers\n- Custom meta-annotation support\n\n### Spring Cloud OpenFeign\n\nSupport for Feign client interfaces:\n\n- `@FeignClient` interface detection\n- Spring MVC annotations on interface methods\n- Native Feign annotations: `@RequestLine`, `@Headers`, `@Body`, `@Param`\n\n### JAX-RS\n\nFull support for JAX-RS annotations:\n\n- `@Path`, `@GET`, `@POST`, `@PUT`, `@DELETE`, `@PATCH`, `@HEAD`, `@OPTIONS`\n- `@PathParam`, `@QueryParam`, `@FormParam`, `@HeaderParam`, `@CookieParam`, `@MatrixParam`\n- `@Consumes`, `@Produces`\n\n### gRPC\n\nSupport for gRPC service implementations:\n\n- Service path extraction (`/\u003cpackage\u003e.\u003cServiceName\u003e/\u003cMethodName\u003e`)\n- Streaming type detection (unary, server-streaming, client-streaming, bidirectional)\n- Request/response protobuf message type resolution\n- Server reflection support\n- Stub class resolution\n\n## How to Use\n\n### Export APIs\n\n1. Right-click on a controller file, class, or method in the editor or project view\n2. Select **EasyApi → Export** (or press `Ctrl+E` on macOS / `Alt+Shift+E`)\n3. Choose the target format (Postman / Markdown / cURL / HTTP Client)\n4. The APIs will be exported automatically\n\n### Call an API\n\n1. Right-click on a controller method\n2. Select **EasyApi → Call** (or press `Ctrl+C` on macOS / `Alt+Shift+C`)\n3. The API Dashboard opens with the endpoint loaded\n4. Edit parameters and send the request\n\n### Open API Dashboard\n\n- Go to **Tools → Open API Dashboard**\n- Or click the **API Dashboard** tab at the bottom of the IDE\n\n### Search APIs\n\n- Press `Double Shift` to open Search Everywhere\n- Switch to the **APIs** tab\n- Type an HTTP method prefix (e.g., `GET /users`) or any keyword\n\n### Convert Fields\n\n1. Right-click on a class in the editor\n2. Select **EasyApi → ToJson / ToJson5 / ToProperties**\n\n## Development\n\n### Prerequisites\n\n- JDK 17 or higher\n- IntelliJ IDEA 2025.2 or higher\n\n### Build \u0026 Run\n\n```bash\n# Run an IDEA instance with the plugin installed\n./gradlew runIde\n\n# Run all tests\n./gradlew clean test\n```\n\n### Compatibility\n\n| JDK | IDE | Status |\n|-----|-----|--------|\n| 17 | 2025.2.1 | ✓ |\n\n### Architecture\n\nThe plugin follows a layered architecture:\n\n```mermaid\ngraph TB\n    IDE[\"IDE Integration Layer\u003cbr/\u003e(Actions, Dashboard, Line Markers, Search)\"]\n    Export[\"Export Layer\u003cbr/\u003e(ExportOrchestrator → ClassExporter → ApiExporter)\"]\n    Core[\"Core Services\u003cbr/\u003e(RuleEngine, ConfigReader, ApiIndex, HttpClient)\"]\n    PSI[\"PSI Analysis\u003cbr/\u003e(TypeResolver, DocHelper, AnnotationHelper)\"]\n\n    IDE --\u003e Export\n    Export --\u003e Core\n    Core --\u003e PSI\n```\n\n- **ClassExporter** — Extracts `ApiEndpoint` models from PSI classes (Spring MVC, JAX-RS, Feign, gRPC)\n- **ApiExporter** — Converts `ApiEndpoint` models to output formats (Markdown, Postman, cURL, HTTP Client)\n- **ExportOrchestrator** — Coordinates the full export pipeline from scanning to output\n- **ApiIndex** — Caches discovered endpoints for fast search and dashboard access\n- **RuleEngine** — Evaluates rule expressions to customize parsing behavior\n\n## Contributing\n\nYou can propose a feature request by opening an issue or a pull request.\n\nHere is a list of contributors:\n\n\u003ca href=\"https://github.com/tangcent/easy-api/graphs/contributors\"\u003e\n  \u003cimg src=\"https://contrib.rocks/image?repo=tangcent/easy-api\" /\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftangcent%2Feasy-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftangcent%2Feasy-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftangcent%2Feasy-api/lists"}