Skip to main content

Reverse engineer third party APIs into python SDKs

Project description

🦊 web2sdk

Automatically turn third party APIs into Python SDKs

License Issues

Web2sdk is a set of tools for reverse engineering APIs by intercepting network requests. It processes HAR files exported from Chrome devtools into an OpenAPI schema, then automatically generates a python SDK based on the schema. Each method in the python SDK corresponds to an endpoint, and includes strongly typed arguments, requests, and responses.

https://github.com/user-attachments/assets/5a7f477d-76ab-46f2-9884-62dfc9f2715b

Features

  • Generates an OpenAPI/Swagger yaml schema from any web-based flow
  • Automatically merges requests to the same endpoint
  • Generates pydantic classes based on OpenAPI request and response schemas
  • Supports basic and bearer auth schemes
  • Supports overriding default headers

Usage

1. Export HAR file

  • Open Chrome devtools and go to "Network".

  • Go through a flow on a website that triggers the requests you want to capture and reverse engineer. The more varied the requests the better, as a single request might not capture all the possible request and response schemas for a particular endpoint.

  • Click the button shown below to export the HAR file. Don't worry about filtering out requests, that happens later.

  • Also compatible with mitmweb exports.

    CleanShot 2024-08-27 at 21 11 53

2. Install web2sdk

$ pip install web2sdk

3. Generate an OpenAPI spec and SDK

$ web2sdk --requests-path <path/to/har/or/flow/file> --base-url <https://finic.ai/api/v1> --sdk-name FinicSDK --auth-type bearer
  • base-url filters out requests that don't start with the url provided. This should include everything up until the endpoints you want to reverse engineer.
  • For example, https://finic.ai/api/v1 will match only requests to the v1 endpiont, but https://finic.ai/api will match requests from v1, v2, and any other paths after /api.
  • Generated files will be saved to generated/<sdk_name>.yaml and generated/<sdk_name>.py in the current directory by default.

4. Run your python SDK.

from generated.FinicSDK import FinicSDK

finic = FinicSDK(hostname="finic.ai", token="your_token_here")
finic.get_connectors({})
finic.post_message({ message: "hi there" }, override_headers={ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)" })
  • Each method in the generated SDK corresponds to an endpoint
  • You can pass in any headers you want. By default, only Authorization and User-Agent headers are included.
  • Some methods accept parameters and/or request bodies. Inspect the function to see what arguments it takes.

Other Options

-- auth <basic|bearer>

  • Optional, defaults to none. If set, the generated SDK class will expect a username and password for basic auth or a token for bearer auth.

--output

  • Optional, defaults to generated/ in the current directory. Specify a directory for the generated .yaml and .py files to be saved.

--interactive

  • Run in interactive mode. Not well supported.

🚧 Planned Improvements

  • Support for oauth and custom auth schemes. In the mean
  • Automatic auth token refresh
  • Support for templated API paths (e.g. https://api.claude.ai/api/organizations/{organization_id}/chat_conversations)
  • Use LLMs to generate more readable class names, example request payloads, and other tasks that require fuzzy reasoning
  • Include a linter/formatter to make generated SDK more readable

Acknowledgements

Web2sdk's includes a modified version of mitmproxy2swagger.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

web2sdk-0.0.2.tar.gz (19.2 kB view details)

Uploaded Source

Built Distribution

web2sdk-0.0.2-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

Details for the file web2sdk-0.0.2.tar.gz.

File metadata

  • Download URL: web2sdk-0.0.2.tar.gz
  • Upload date:
  • Size: 19.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.10.14 Darwin/23.6.0

File hashes

Hashes for web2sdk-0.0.2.tar.gz
Algorithm Hash digest
SHA256 091c44386fb3f947e3cb3840575e5ab09e0770aed54e593444e54ef99b2d8b4a
MD5 5dd468c5fa7dbe8396bdfca3d5056b7f
BLAKE2b-256 210d3987ec4a61c339fe76a0e3aac6290202edbb50deb5e55f1a029ef9a19839

See more details on using hashes here.

File details

Details for the file web2sdk-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: web2sdk-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 22.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.10.14 Darwin/23.6.0

File hashes

Hashes for web2sdk-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b8b475cdc84e74ed28a6b08b79c6f557dcea9263f8cdcdfe5f796ac74baf193f
MD5 c4b12f279c37b4dd0488586197dcab77
BLAKE2b-256 2bd12298ddd003034f7c79431df0daeff69b8fe57562856cd65fbfd268a69c40

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page