Compare commits

...

49 Commits

Author SHA1 Message Date
eb8630ff24 New Endpoint /Filters2, to make implementation easier 2026-04-09 14:34:58 +02:00
2960d1bd36 Each branch has now hints 2026-02-24 09:41:23 +01:00
6eda09efbe More fields and some bugfixes 2026-01-30 07:45:25 +01:00
dc1751b852 Update README.md 2026-01-30 07:44:50 +01:00
760da37fe3 Methods to search the exact predecessor and successor 2026-01-30 07:44:48 +01:00
adb589ef49 New fields for redirecting to a customer url 2025-10-29 08:42:56 +01:00
fbcb1ff6bb Filters extended for PairSearch 2025-10-20 09:08:40 +02:00
68eca53428 Added Motorcycle-Data 2025-10-17 09:41:45 +02:00
694582091b Typing error 2025-10-16 15:16:36 +02:00
254d3b09ae Search by motorcycles 2025-10-16 14:57:10 +02:00
1c7255fa72 Abfrage von Zuhebörteilen, wie z.B. Schläuchen 2025-10-16 11:33:09 +02:00
574b8caf49 Reorganization for better understanding 2025-10-16 10:14:28 +02:00
dacc6cade4 Pair- or Couplesearch implementation
For different dimensions of front and rear axle
2025-10-16 09:25:45 +02:00
6d93e58c98 New Endpoint for StockDetails of an article
And some more descriptions for stock coloumns. The clients are using often abbreviations
2025-10-15 11:17:18 +02:00
1edeb5178d Raw ProgramIdentifier 2025-10-07 09:28:58 +02:00
1e6a843330 Added designations for any UI, to show 2025-09-12 10:27:34 +02:00
b797105afc Added GuidOnlineService-Parameter 2025-09-04 06:38:13 +02:00
741f6c34dd Providing information about top sold articles 2025-08-21 10:28:38 +02:00
cb2e4d1d60 Added Areas
These are blocks on the page to show custom content. Like typical advertisment-blocks on other websites.
2025-08-21 09:40:40 +02:00
7449bb1a06 Wrong type 2025-08-21 07:44:08 +02:00
791d46ff6b ShopArticleInformation added. I.e. photos and marketing stuff 2025-08-21 07:40:44 +02:00
5b9a836c65 V10 - rework of Blob-Handling 2025-08-20 10:33:58 +02:00
cec3fa68ad The updated document gets returned 2025-08-20 10:30:59 +02:00
00243eb3b5 Small enhancements due to requests 2025-08-05 14:23:49 +02:00
8cd8199417 New fields for article references and the function to rearrange the customer storage 2025-06-19 14:05:05 +02:00
738aaa0a6d Amount in cart is now a complex object 2025-06-19 13:38:08 +02:00
094262e414 Naming in Browsers is stupid.
Yeah :/
2024-10-01 12:00:06 +02:00
5bc944a908 Some moments has been missing 2024-09-03 08:06:37 +02:00
8b6aa36d36 Version 8 2024-09-03 07:59:09 +02:00
a5aaa63f8a Major changes in all endpoints and the sheme behind. 2024-08-26 15:57:04 +02:00
a49185ea21 Refactoring a little bit 2024-08-23 15:12:24 +02:00
41ef94f527 Implementation of CalculationProfiles 2024-08-21 20:09:51 +02:00
78ff9504f6 Update to V5. Stocks and Prices will be delivered now. 2024-07-26 17:45:41 +02:00
b4b5c587fa Update of Todos 2024-07-18 09:50:51 +02:00
0bbb294b64 Mainfunctions for the shop 2024-07-15 14:41:41 +02:00
8954cbd05f More endpoints integrated 2024-07-15 11:44:02 +02:00
ad34e634ca Version 4 with more endpoints 2024-07-12 17:06:10 +02:00
3360b4c652 Renaming 2024-07-05 09:51:34 +02:00
4134af8b3c Further developments 2024-07-05 09:49:15 +02:00
74bac0ea74 There exists branch specific regulations 2024-07-05 09:49:04 +02:00
6c9a468e10 Fix: Wrong type 2024-07-02 14:02:58 +02:00
44cb101990 Added a parameter for default document despatch 2024-06-24 09:43:52 +02:00
fae00c2a4c Further descriptions and development 2024-06-24 09:42:33 +02:00
8aa53558ca Further adjustments during testing and implementation 2024-05-29 14:39:29 +02:00
705b1385da Changes during implementation 2024-05-27 12:05:28 +02:00
15dfdf22d7 thoughts 2024-05-27 06:23:23 +02:00
6d620be849 Adding Tags for more clearance and slight adjustments 2024-05-22 13:59:28 +02:00
1441a8b92d Current shop changes for step 1 of the integration 2024-05-21 11:38:59 +02:00
8d386222c1 First draft 2024-05-15 13:25:28 +02:00
6 changed files with 4852 additions and 521 deletions

View File

@@ -19,9 +19,12 @@ https://www.astera.com/de/type/blog/api-design-best-practices
https://www.citusdata.com/blog/2016/03/30/five-ways-to-paginate/
https://stackoverflow.blog/2021/10/06/best-practices-for-authentication-and-authorization-for-rest-apis/
https://www.akamai.com/blog/security/rest-api-security-best-practices
https://jakarta.ee/specifications/data/1.0/
# Examples
https://docs.hetzner.cloud/
https://opensource.zalando.com/restful-api-guidelines
https://kubernetes.io/docs/reference/using-api/api-concepts
https://docs.stripe.com/api/prices
https://developer.clickup.com/docs/authentication

View File

@@ -331,6 +331,13 @@ paths:
- "Customers"
parameters:
- $ref: "#/components/parameters/ResponseResolutionDepthParameter"
- name: "EMailAddressShouldBeUsedToCreateADefaultDocumentDespatch"
in: "query"
required: false
description: "The default - as in our ERP program TyrePro - is: NonCashReceiptDealsOnly, Invoices, CreditNotes and CustomerStorages will get delivered by E-Mail as normal PDF."
schema:
type: "boolean"
default: false
requestBody:
required: true
content:
@@ -432,6 +439,13 @@ paths:
- "Customers"
description: "Finds similar accounts. The algorithm uses for example phonetic analysis and more to create the results."
parameters:
- name: "GuidBranch"
in: "query"
required: true
schema:
type: "string"
default: null
example: "ebb89e89-8d25-809e-7814-c53b686ae164"
- name: "Name1"
in: "query"
required: true
@@ -1273,6 +1287,62 @@ paths:
$ref: "#/components/responses/GenericError"
security:
- SessionScheme: []
/Documents/{Guid}/custommethods/AcceptOffer:
post:
tags:
- "Documents"
description: "Accepts an offer. Dependant on the implementation, it could be that the offer is after the operation an order."
parameters:
- $ref: "#/components/parameters/GuidPathParameter"
- $ref: "#/components/parameters/_HashValueParameter"
- name: "Comment"
in: "query"
required: false
schema:
type: "string"
default: null
example: "Thanks you!"
responses:
200:
description: "successful operation"
content:
application/json:
schema:
$ref: "#/components/schemas/Document"
401:
$ref: "#/components/responses/SessionOfOnlineUserOrHigherRequired"
default:
$ref: "#/components/responses/GenericError"
security:
- SessionScheme: []
/Documents/{Guid}/custommethods/RejectOffer:
post:
tags:
- "Documents"
description: "Rejects an offer. Dependant on the implementation, the offer keeps beeing open for further responses or gets historic."
parameters:
- $ref: "#/components/parameters/GuidPathParameter"
- $ref: "#/components/parameters/_HashValueParameter"
- name: "Comment"
in: "query"
required: false
schema:
type: "string"
default: null
example: "The price is higher than excepted. Can you make another offer?"
responses:
200:
description: "successful operation"
content:
application/json:
schema:
$ref: "#/components/schemas/Document"
401:
$ref: "#/components/responses/SessionOfOnlineUserOrHigherRequired"
default:
$ref: "#/components/responses/GenericError"
security:
- SessionScheme: []
/DocumentPositions:
get:
tags:
@@ -3954,13 +4024,13 @@ components:
Amount:
type: "number"
SalesPriceNetSingle:
type: "string"
type: "number"
SalesPriceGrossSingle:
type: "string"
type: "number"
SalesPriceNetTotal:
type: "string"
type: "number"
SalesPriceGrossTotal:
type: "string"
type: "number"
Designation:
type: "string"
_HashValue:
@@ -4123,6 +4193,7 @@ components:
- "GuidOnlineSchedulerService"
- "GuidBranch"
- "IsDefault"
- "Hints"
properties:
Guid:
type: "string"
@@ -4132,6 +4203,22 @@ components:
type: "string"
IsDefault:
type: "string"
Hints:
type: "array"
items:
type: "object"
required:
- "AttentionLevel"
- "Hint"
properties:
AttentionLevel:
type: "string"
enum:
- "Low"
- "Mid"
- "High"
Hint:
type: "string"
_HashValue:
$ref: "#/components/schemas/_HashValue"
example:
@@ -4192,6 +4279,7 @@ components:
- "UsersMayEnterANewLicenceTag"
- "IsConnectedWithATyreStorage"
- "DeadlineTimeInSecondsSinceMidnight"
- "DeadlineTimeInSecondsSinceMidnight"
properties:
Guid:
type: "string"
@@ -4216,6 +4304,16 @@ components:
type: "boolean"
DeadlineTimeInSecondsSinceMidnight:
type: "integer"
RedirectUrlType:
type: "string"
enum:
- "None"
- "NewTab"
- "SameTab"
RedirectUrl:
type: "string"
RedirectUrlShallBeShownAsOptionalButton:
type: "boolean"
_HashValue:
$ref: "#/components/schemas/_HashValue"
example:

View File

@@ -1,10 +1,10 @@
*Currently under heavy development*
***Currently under heavy development***
## Overview
# Overview
Our API follows the REST-API-Principles.
# URI structure / Products
## URI structure / Products
We will have a bunch of use cases. Some API consumers want to develop
- an appointment making service
@@ -15,7 +15,7 @@ We will have a bunch of use cases. Some API consumers want to develop
Because of the variety of requirements, we offer different API products. The naming results to "/api/<product>/...". This allows us to provide different views of the same resource depending on your use case and permissions.
# Domain
## Domain
We as [PRM Software AG](https://prm-ag.de) offer you this API for our customers and act in that case as a service provider. For requesting the data of a trader, it is neccessary to get the permissions of each trader.
@@ -23,30 +23,75 @@ Each trader has it's own domain or a generated one by us. The base-URI could be:
- https://example-store.de/
- https://onlineservices.prod.rz2.prm-ag.de/asd8s76df9/
# Methods
## Methods and resources
With each call you'll interact with ressources. We follow typical best practices in HTTP method and URI namings.
- GET /api/tyrepro/users -> Retrieve all customers
- GET /api/tyrepro/users/1 -> Retrieve data of customer 1
- GET /api/tyrepro/users/1/permissions -> Retrieve all permissions of customer 1
- POST /api/tyrepro/users -> Create a customer
- PATCH /api/tyrepro/users/1 -> Modify some data of customer 1
- DELETE /api/tyrepro/users/1 -> Delete customer 1
With each call you'll [interact with resources](https://restfulapi.net/http-methods/).
To apply non-CRUD-methods to a ressource, we allways use HTTP-POST-methods.
- POST /api/tyrepro/users/1/ban -> Ban customer 1
- POST /api/tyrepro/users/1/notify-gtc-violance -> Notifies customer 1 for a violation of the terms and conditions
- GET /api/core/Users -> Retrieve all customers
- GET /api/core/Users/1 -> Retrieve data of customer 1
- GET /api/core/Users/1/Permissions -> Retrieve all permissions of customer 1
- POST /api/core/Users -> Create a customer
- PATCH /api/core/Users/1 -> Modify some data of customer 1
- DELETE /api/core/Users/1 -> Delete customer 1
# Authentication
To apply non-CRUD-methods to a resource, we allways use HTTP-POST-methods.
# Errors
- POST /api/core/Users/1/Ban -> Ban customer 1
- POST /api/core/Users/1/NotifyGtcViolance -> Notifies customer 1 for a violation of the terms and conditions
# Rate Limiting
*Yeah. In an ideal world we would use those verbs as HTTP-methods as well, but not all clients and servers support that functionality. And it's not common in the dev-society currently, therefore, we think, most developers would be confused.*
# Pagination
**The character casing of resource names is significant!**
# Sorting
## Authorization
# Response Resolution
### Static access tokens
# Caching
Within our ERP-system TyrePro, the trader is able to configurate static access tokens. **Use static access tokens only, if you really trust the environment, where they are stored.**
### Access tokens by authentication
In our authentication.yaml, you'll find endpoints to authenticate with some users credentials.
### Passing the parameters
The recommended way of passing the access token is within the HTTP-Header 'Authorization: Bearer <token>'. For use cases of temporary sharing or simplified backend to backend calls, you could also pass the access token as query parameter '?AuthorizationToken=<token>'. Please be aware, that in a lot of libraries the request URI (including queryparameters) may get logged.
## Errors
## Rate Limiting
## Pagination
## Sorting
## Response Resolution
## Caching
## Confirmation codes
some request require an explicit confirmation. There the server creates a confirmation code and a message and the client has to send the request again with the confirmation code. the code is temporary stored at server side.
## Events
subscribe to events and get a post request on your side
## Performance
response header notice
# Open-API documentation
Because of all those general options, we use a minimal documentation style of our Open-API-yaml-files. Example: Even when you will not find the pagination-parameters in the yaml-file, you can use them.
The usage of the minimal style will make it easier for you to see what exactly is part of the implementation and what is general. In a scenario of a full documentation the actual implementation details may be skipped in the complexity of general parameters.
# A typical request flow
1. Request entering
2. URI normalization
3. Ressource identification
4. Authorization check
5. Rate limit check
6. Request processing
7. Cache postprocessing

1005
src/v2/onlineservices.yaml Normal file

File diff suppressed because it is too large Load Diff

2592
src/v2/shop.yaml Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff