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://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://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://www.akamai.com/blog/security/rest-api-security-best-practices
https://jakarta.ee/specifications/data/1.0/
# Examples # Examples
https://docs.hetzner.cloud/ https://docs.hetzner.cloud/
https://opensource.zalando.com/restful-api-guidelines https://opensource.zalando.com/restful-api-guidelines
https://kubernetes.io/docs/reference/using-api/api-concepts 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" - "Customers"
parameters: parameters:
- $ref: "#/components/parameters/ResponseResolutionDepthParameter" - $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: requestBody:
required: true required: true
content: content:
@@ -432,6 +439,13 @@ paths:
- "Customers" - "Customers"
description: "Finds similar accounts. The algorithm uses for example phonetic analysis and more to create the results." description: "Finds similar accounts. The algorithm uses for example phonetic analysis and more to create the results."
parameters: parameters:
- name: "GuidBranch"
in: "query"
required: true
schema:
type: "string"
default: null
example: "ebb89e89-8d25-809e-7814-c53b686ae164"
- name: "Name1" - name: "Name1"
in: "query" in: "query"
required: true required: true
@@ -1273,6 +1287,62 @@ paths:
$ref: "#/components/responses/GenericError" $ref: "#/components/responses/GenericError"
security: security:
- SessionScheme: [] - 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: /DocumentPositions:
get: get:
tags: tags:
@@ -3954,13 +4024,13 @@ components:
Amount: Amount:
type: "number" type: "number"
SalesPriceNetSingle: SalesPriceNetSingle:
type: "string" type: "number"
SalesPriceGrossSingle: SalesPriceGrossSingle:
type: "string" type: "number"
SalesPriceNetTotal: SalesPriceNetTotal:
type: "string" type: "number"
SalesPriceGrossTotal: SalesPriceGrossTotal:
type: "string" type: "number"
Designation: Designation:
type: "string" type: "string"
_HashValue: _HashValue:
@@ -4123,6 +4193,7 @@ components:
- "GuidOnlineSchedulerService" - "GuidOnlineSchedulerService"
- "GuidBranch" - "GuidBranch"
- "IsDefault" - "IsDefault"
- "Hints"
properties: properties:
Guid: Guid:
type: "string" type: "string"
@@ -4132,6 +4203,22 @@ components:
type: "string" type: "string"
IsDefault: IsDefault:
type: "string" type: "string"
Hints:
type: "array"
items:
type: "object"
required:
- "AttentionLevel"
- "Hint"
properties:
AttentionLevel:
type: "string"
enum:
- "Low"
- "Mid"
- "High"
Hint:
type: "string"
_HashValue: _HashValue:
$ref: "#/components/schemas/_HashValue" $ref: "#/components/schemas/_HashValue"
example: example:
@@ -4192,6 +4279,7 @@ components:
- "UsersMayEnterANewLicenceTag" - "UsersMayEnterANewLicenceTag"
- "IsConnectedWithATyreStorage" - "IsConnectedWithATyreStorage"
- "DeadlineTimeInSecondsSinceMidnight" - "DeadlineTimeInSecondsSinceMidnight"
- "DeadlineTimeInSecondsSinceMidnight"
properties: properties:
Guid: Guid:
type: "string" type: "string"
@@ -4216,6 +4304,16 @@ components:
type: "boolean" type: "boolean"
DeadlineTimeInSecondsSinceMidnight: DeadlineTimeInSecondsSinceMidnight:
type: "integer" type: "integer"
RedirectUrlType:
type: "string"
enum:
- "None"
- "NewTab"
- "SameTab"
RedirectUrl:
type: "string"
RedirectUrlShallBeShownAsOptionalButton:
type: "boolean"
_HashValue: _HashValue:
$ref: "#/components/schemas/_HashValue" $ref: "#/components/schemas/_HashValue"
example: example:

View File

@@ -1,10 +1,10 @@
*Currently under heavy development* ***Currently under heavy development***
## Overview # Overview
Our API follows the REST-API-Principles. 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 We will have a bunch of use cases. Some API consumers want to develop
- an appointment making service - 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. 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. 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://example-store.de/
- https://onlineservices.prod.rz2.prm-ag.de/asd8s76df9/ - 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. With each call you'll [interact with resources](https://restfulapi.net/http-methods/).
- 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
To apply non-CRUD-methods to a ressource, we allways use HTTP-POST-methods. - GET /api/core/Users -> Retrieve all customers
- POST /api/tyrepro/users/1/ban -> Ban customer 1 - GET /api/core/Users/1 -> Retrieve data of 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/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