From e69a11fac8fdce54d7fc613cb1050e1bf7b1d4d0 Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Thu, 10 Nov 2022 16:13:08 +0100 Subject: [PATCH 01/33] Create doc and add structure --- .../modeling/integration/rest-binary.md | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 content/en/docs/refguide/modeling/integration/rest-binary.md diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md new file mode 100644 index 00000000000..d397a8bb971 --- /dev/null +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -0,0 +1,53 @@ +--- +title: "Send and Receive Files with REST" +url: /refguide/send-receive-files-rest/ +linktitle: "Send and Receive Files with REST" +weight: 79 +tags: ["rest", "binary", "send files", "receive files", "OData", "expose", "consume"] +--- + +## 1 Introduction + +Learn how to send and receive files by exposing and consuming binary from a REST service. + +## 2 Exposing Files + +(Separate between images and PDFs) + +1. System.File Document - Entity containing the files you want to publish in a REST API +2. Generate overview pages +3. Expose as REST resource +4. Select the required operations (Get all, get by key, post, delete). Default generated service, the Get by key should return a binary response because it will return a file document). +5. A binary object without an export mapping will return binary content (Export mapping: none) +6. [Microflow example, returning a file document] + +## 3 Consuming Files + +Now, you need to implement an API client that will retrieve binary files and store the result in a FileDocument. + - RetrievedFile (System.Image) + +Can use an image, let's say a PNG file. +OpenAPI documentation is generated +Get all returns the binary content as a string (if included in the export mapping) +You can also test in VSC with Accept: application/json; same result as above +You can ask for a response in XML (application/xml) +If you ask for a specific FileDocument object, the binary content will be returned. But the correct mimetype is missing (Mendix doesn't know the mediatype of a FileDocument) + - So you can add a mime-type in the microflow returning the file document object + - Response now, viewed in OpenAPI spec and VSC, is actually an image! + +## Try It Out + +Test page: +* Button to retrieve image in a MF +* Image widget to directly view the image without a MF REST call +* List view to show all retrieved images +* Image widget links to resource endpoint provided by the REST service +Call rest service: GetImage MF; Call REST (GET)[GetResponseFile] Retrieved File -> Change 'GetResponseFile'. REST Call activity also uses the same API endpoint +In the Response: stores the retrieved binary image in the entity provided (GetResponseFile), and refreshes the object in the client so the listview will display the additional retrieved image. The images then show up in your test app + +Benefit of not using base64 encoded binaries: API endpoint works everywhere as expected, so you can open the image in the browser +For PDF, all is the same; just change the mime type (application/pdf) in the Create Object part of your microflow +You can upload an example PDF, different location, so no need to update the URL +Image viewer doesn't work for PDFs -> needs to be replaced by a different widget to view PDF resources. But opens fine in a browser +Easiest way to display a PDF: use an HTML snippet widget to add an embed tag to your page + From d46488909b4ec01d2459d4e446014abcf783020f Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 14 Nov 2022 14:01:47 +0100 Subject: [PATCH 02/33] A few changes --- .../modeling/integration/rest-binary.md | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index d397a8bb971..2ac0b7ab6e0 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -1,19 +1,38 @@ --- -title: "Send and Receive Files with REST" +title: "Publish and Consume Images and Files with REST" url: /refguide/send-receive-files-rest/ -linktitle: "Send and Receive Files with REST" +linktitle: "Publish and Consume Images and Files with REST" weight: 79 -tags: ["rest", "binary", "send files", "receive files", "OData", "expose", "consume"] +tags: ["rest", "binary", "send files", "receive files", "OData", "expose", "published REST service", "consume"] --- ## 1 Introduction -Learn how to send and receive files by exposing and consuming binary from a REST service. +Learn how to publish or consume files with REST in Studio Pro. + +### 1.1 Prerequisites + +To publish or consume files with REST, do the following: + +* Install Studio Pro +* Read how to [publish](/howto/integration/publish-rest-service/) and [consume](/howto/integration/consume-a-rest-service/) REST services +* Read about [working with images and files](/howto/data-models/working-with-images-and-files/) in Studio Pro + +## 2 Using Images and Files in Your App + +To publish and consume images or files with REST, you need to be using them in your app. The entities that you will expose and publish will be **System.Image** or **System.FileDocument** + +Follow [Work with Images and Files](/howto/data-models/working-with-images-and-files/) for step-by-step instructions, including using the **System.Image** and **System.FileDocument** generalizations. + +## 3 Publish Images and Files as REST + + -## 2 Exposing Files (Separate between images and PDFs) + + 1. System.File Document - Entity containing the files you want to publish in a REST API 2. Generate overview pages 3. Expose as REST resource @@ -21,7 +40,7 @@ Learn how to send and receive files by exposing and consuming binary from a REST 5. A binary object without an export mapping will return binary content (Export mapping: none) 6. [Microflow example, returning a file document] -## 3 Consuming Files +## 4 Consuming Images and Files with REST Now, you need to implement an API client that will retrieve binary files and store the result in a FileDocument. - RetrievedFile (System.Image) @@ -35,7 +54,7 @@ If you ask for a specific FileDocument object, the binary content will be return - So you can add a mime-type in the microflow returning the file document object - Response now, viewed in OpenAPI spec and VSC, is actually an image! -## Try It Out +## 5 Try It Out Test page: * Button to retrieve image in a MF From 4ccb0b5c34fd206c97af5681ee16b7761420a0a0 Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 14 Nov 2022 16:15:12 +0100 Subject: [PATCH 03/33] Add anchor, clarify steps --- .../generate-rest-resource.md | 2 +- .../modeling/integration/rest-binary.md | 42 ++++++++++++------- 2 files changed, 29 insertions(+), 15 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/published-rest-services/generate-rest-resource.md b/content/en/docs/refguide/modeling/integration/published-rest-services/generate-rest-resource.md index 4296f3f2d73..b0daeda4fc9 100644 --- a/content/en/docs/refguide/modeling/integration/published-rest-services/generate-rest-resource.md +++ b/content/en/docs/refguide/modeling/integration/published-rest-services/generate-rest-resource.md @@ -26,7 +26,7 @@ Type the name of the resource that you want to publish. To be able to create a **Get by key**, a **Patch** or a **Delete** operation, there needs to be a unique attribute on the entity. Select that attribute here. -## 4 Operations +## 4 Operations {#operations} Check the operations that you want to generate: diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 2ac0b7ab6e0..207f98e39ae 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -8,37 +8,51 @@ tags: ["rest", "binary", "send files", "receive files", "OData", "expose", "publ ## 1 Introduction -Learn how to publish or consume files with REST in Studio Pro. +Follow this guide to learn how to publish images and files as REST services for use in other apps. ### 1.1 Prerequisites -To publish or consume files with REST, do the following: +To publish or consume files and images with REST, do the following: -* Install Studio Pro -* Read how to [publish](/howto/integration/publish-rest-service/) and [consume](/howto/integration/consume-a-rest-service/) REST services -* Read about [working with images and files](/howto/data-models/working-with-images-and-files/) in Studio Pro +* Install Studio Pro + +While not required, we recommend reading the following for more background: + +* [Publishing](/howto/integration/publish-rest-service/) and [consuming](/howto/integration/consume-a-rest-service/) REST services +* [Working with images and files](/howto/data-models/working-with-images-and-files/) in Studio Pro ## 2 Using Images and Files in Your App -To publish and consume images or files with REST, you need to be using them in your app. The entities that you will expose and publish will be **System.Image** or **System.FileDocument** +To publish and consume images or files with REST, you need to be using them in your app. Images and files you use in your app are stored in **System.Image** and **System.FileDocument** entities. -Follow [Work with Images and Files](/howto/data-models/working-with-images-and-files/) for step-by-step instructions, including using the **System.Image** and **System.FileDocument** generalizations. +Follow [Work with Images and Files](/howto/data-models/working-with-images-and-files/) for step-by-step instructions on setting up these entities and overview pages and using them in your app. ## 3 Publish Images and Files as REST +We can use this entity as a reference: + + + +To publish the **System.Image** or **System.Filedocument** entities as a [REST service](/refguide/published-rest-service/), do the following: + +1. Generate the overview pages if you have not yet done so. + Right click on the **System.Image** or **System.FileDocument** entity that you want to publish, and click **Generate overview pages**. +2. Expose the entity as a REST resource. + Right-click on the **System.Image** or **System.FileDocument** entity that contains the file(s) that you want to publish, and click **Expose as a REST resource**. +3. Click **Select** next to the **Service** field, then click on the folder where you want to create the service and click **New**. Enter a name for the REST service and click **OK**. + +4. Back in the **Generate resource and operations** window, select the **Key attribute** and required **Operations**, then click **OK**. + The **Key attribute** should be **FileID**. + See the [Operations](/refguide/generate-rest-resource/#operations) section of *Generating a Published REST Resource* for a description of each operation. -(Separate between images and PDFs) +5. The **Published REST service** document has been created and is now open on your screen. By default, the **Get by** key should return a binary response because it will return a FileDocument. -1. System.File Document - Entity containing the files you want to publish in a REST API -2. Generate overview pages -3. Expose as REST resource -4. Select the required operations (Get all, get by key, post, delete). Default generated service, the Get by key should return a binary response because it will return a file document). -5. A binary object without an export mapping will return binary content (Export mapping: none) -6. [Microflow example, returning a file document] +6. A binary object without an export mapping will return binary content (Export mapping: none) +7. [Microflow example, returning a file document] ## 4 Consuming Images and Files with REST From 3b66be84cc65430c41fa1a129a942d12f2ed28be Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 21 Nov 2022 09:57:40 +0100 Subject: [PATCH 04/33] Add a few more images --- .../modeling/integration/rest-binary.md | 13 ++++++++----- .../rest-binary/no-export-mapping.png | Bin 0 -> 141498 bytes .../rest-binary/starting-entity.png | Bin 0 -> 23839 bytes 3 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 static/attachments/refguide/modeling/integration/rest-binary/no-export-mapping.png create mode 100644 static/attachments/refguide/modeling/integration/rest-binary/starting-entity.png diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 207f98e39ae..5977926b172 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -29,9 +29,9 @@ Follow [Work with Images and Files](/howto/data-models/working-with-images-and-f ## 3 Publish Images and Files as REST -We can use this entity as a reference: - +We can use this entity as a starting point: +{{< figure src="/attachments/refguide/integration/rest-binary/starting-entity.png" >}} To publish the **System.Image** or **System.Filedocument** entities as a [REST service](/refguide/published-rest-service/), do the following: @@ -47,12 +47,15 @@ To publish the **System.Image** or **System.Filedocument** entities as a [REST s The **Key attribute** should be **FileID**. See the [Operations](/refguide/generate-rest-resource/#operations) section of *Generating a Published REST Resource* for a description of each operation. -5. The **Published REST service** document has been created and is now open on your screen. By default, the **Get by** key should return a binary response because it will return a FileDocument. +The **Published REST service** document for the exposed entity has been created and is now open on your screen. + +### 3.1 Understanding the Service Details +Double-click the **Get by** key, or single-click and click **Edit**, to open the **Get by** property details. By default, the **Get by** key should return a binary response because it will return a **FileDocument**. The **Export mapping** is blank because a binary object without an export mapping will return binary content. +{{< figure src="/attachments/refguide/integration/rest-binary/no-export-mapping.png" >}} -6. A binary object without an export mapping will return binary content (Export mapping: none) -7. [Microflow example, returning a file document] +Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFiles_Get_ByKey** microflow. You can see that the generated **Get by** key returns a file document. ## 4 Consuming Images and Files with REST diff --git a/static/attachments/refguide/modeling/integration/rest-binary/no-export-mapping.png b/static/attachments/refguide/modeling/integration/rest-binary/no-export-mapping.png new file mode 100644 index 0000000000000000000000000000000000000000..d1a8e6e9c7359cedb4fa17b7373cbf92a6fd9cf5 GIT binary patch literal 141498 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 literal 0 HcmV?d00001 diff --git a/static/attachments/refguide/modeling/integration/rest-binary/starting-entity.png b/static/attachments/refguide/modeling/integration/rest-binary/starting-entity.png new file mode 100644 index 0000000000000000000000000000000000000000..14510faeb9f66de6791599d5e82d088acdcaf11e GIT binary patch literal 23839 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 literal 0 HcmV?d00001 From d5c3758d523eb3db3cff40fd9ad6073cc56b23b7 Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 21 Nov 2022 10:06:19 +0100 Subject: [PATCH 05/33] Fix image links --- .../en/docs/refguide/modeling/integration/rest-binary.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 5977926b172..0266f2aecad 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -31,7 +31,7 @@ Follow [Work with Images and Files](/howto/data-models/working-with-images-and-f We can use this entity as a starting point: -{{< figure src="/attachments/refguide/integration/rest-binary/starting-entity.png" >}} +{{< figure src="/attachments/refguide/modeling/integration/rest-binary/starting-entity.png" >}} To publish the **System.Image** or **System.Filedocument** entities as a [REST service](/refguide/published-rest-service/), do the following: @@ -53,10 +53,12 @@ The **Published REST service** document for the exposed entity has been created Double-click the **Get by** key, or single-click and click **Edit**, to open the **Get by** property details. By default, the **Get by** key should return a binary response because it will return a **FileDocument**. The **Export mapping** is blank because a binary object without an export mapping will return binary content. -{{< figure src="/attachments/refguide/integration/rest-binary/no-export-mapping.png" >}} +{{< figure src="/attachments/refguide/modeling/integration/rest-binary/no-export-mapping.png" >}} Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFiles_Get_ByKey** microflow. You can see that the generated **Get by** key returns a file document. + + ## 4 Consuming Images and Files with REST Now, you need to implement an API client that will retrieve binary files and store the result in a FileDocument. From 47b60faf1c8b7525b766c609cf4531f6a2b54ea7 Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 21 Nov 2022 13:27:08 +0100 Subject: [PATCH 06/33] Fix a step --- .../modeling/integration/rest-binary.md | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 0266f2aecad..305595a73c3 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -1,5 +1,5 @@ --- -title: "Publish and Consume Images and Files with REST" +title: "Images and Files with REST" url: /refguide/send-receive-files-rest/ linktitle: "Publish and Consume Images and Files with REST" weight: 79 @@ -8,7 +8,7 @@ tags: ["rest", "binary", "send files", "receive files", "OData", "expose", "publ ## 1 Introduction -Follow this guide to learn how to publish images and files as REST services for use in other apps. +Follow this guide to learn how to publish images and files as REST services for use in other apps. ### 1.1 Prerequisites @@ -16,14 +16,14 @@ To publish or consume files and images with REST, do the following: * Install Studio Pro -While not required, we recommend reading the following for more background: +We recommend reading the following for more background: * [Publishing](/howto/integration/publish-rest-service/) and [consuming](/howto/integration/consume-a-rest-service/) REST services * [Working with images and files](/howto/data-models/working-with-images-and-files/) in Studio Pro ## 2 Using Images and Files in Your App -To publish and consume images or files with REST, you need to be using them in your app. Images and files you use in your app are stored in **System.Image** and **System.FileDocument** entities. +To publish images or files with REST, you need to be using them in your app. Images and files you use in your app are stored in **System.Image** and **System.FileDocument** entities. Follow [Work with Images and Files](/howto/data-models/working-with-images-and-files/) for step-by-step instructions on setting up these entities and overview pages and using them in your app. @@ -43,25 +43,27 @@ To publish the **System.Image** or **System.Filedocument** entities as a [REST s 3. Click **Select** next to the **Service** field, then click on the folder where you want to create the service and click **New**. Enter a name for the REST service and click **OK**. -4. Back in the **Generate resource and operations** window, select the **Key attribute** and required **Operations**, then click **OK**. - The **Key attribute** should be **FileID**. +4. Back in the **Generate resource and operations** window, select **MyFileID** as the **Key attribute** and check the boxes for the following **Operations***: + * **Get all** + * **Get by key** + * **Post (Create)** + * **Delete** + See the [Operations](/refguide/generate-rest-resource/#operations) section of *Generating a Published REST Resource* for a description of each operation. -The **Published REST service** document for the exposed entity has been created and is now open on your screen. +5. Click **OK**. The **Published REST service** document for the exposed image or file entity has been created and is now open on your screen. ### 3.1 Understanding the Service Details -Double-click the **Get by** key, or single-click and click **Edit**, to open the **Get by** property details. By default, the **Get by** key should return a binary response because it will return a **FileDocument**. The **Export mapping** is blank because a binary object without an export mapping will return binary content. +Open your published REST service, then double-click the **Get by** key, or single-click and click **Edit**, to open the **Get by** property details. By default, the **Get by** key will return a binary response because it will return a **FileDocument**. The **Export mapping** is blank because a binary object without an export mapping returns binary content. {{< figure src="/attachments/refguide/modeling/integration/rest-binary/no-export-mapping.png" >}} -Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFiles_Get_ByKey** microflow. You can see that the generated **Get by** key returns a file document. - - +Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFiles_Get_ByKey** microflow. The generated **Get by** key returns a file document. ## 4 Consuming Images and Files with REST -Now, you need to implement an API client that will retrieve binary files and store the result in a FileDocument. +Now that you have a published REST service for your image or file entity, you need to implement an API client that will retrieve binary files and store the result in a FileDocument. - RetrievedFile (System.Image) Can use an image, let's say a PNG file. From f8a14e4a55362c1aaf2613e618892f8d657a71ec Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 21 Nov 2022 14:34:34 +0100 Subject: [PATCH 07/33] Clarify sections --- .../refguide/modeling/integration/rest-binary.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 305595a73c3..998178d5c84 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -8,7 +8,7 @@ tags: ["rest", "binary", "send files", "receive files", "OData", "expose", "publ ## 1 Introduction -Follow this guide to learn how to publish images and files as REST services for use in other apps. +Follow this guide to learn how to publish images and files as REST services. ### 1.1 Prerequisites @@ -35,11 +35,12 @@ We can use this entity as a starting point: To publish the **System.Image** or **System.Filedocument** entities as a [REST service](/refguide/published-rest-service/), do the following: -1. Generate the overview pages if you have not yet done so. - Right click on the **System.Image** or **System.FileDocument** entity that you want to publish, and click **Generate overview pages**. +1. Generate the overview pages if you have not yet done so, and link them to the home page and navigation. + * Right click on the **System.Image** or **System.FileDocument** entity that you want to publish, and click **Generate overview pages**. + * Add a button to the home page that links to the Overview page you created. 2. Expose the entity as a REST resource. - Right-click on the **System.Image** or **System.FileDocument** entity that contains the file(s) that you want to publish, and click **Expose as a REST resource**. + * Right-click on the **System.Image** or **System.FileDocument** entity that contains the file(s) that you want to publish, and click **Expose as a REST resource**. 3. Click **Select** next to the **Service** field, then click on the folder where you want to create the service and click **New**. Enter a name for the REST service and click **OK**. @@ -61,7 +62,9 @@ Open your published REST service, then double-click the **Get by** key, or singl Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFiles_Get_ByKey** microflow. The generated **Get by** key returns a file document. -## 4 Consuming Images and Files with REST + + +## 4 Retrieve Images and Files with REST Now that you have a published REST service for your image or file entity, you need to implement an API client that will retrieve binary files and store the result in a FileDocument. - RetrievedFile (System.Image) From b0e8e730327b74a3a438617d2d2b18fa79542cbd Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Wed, 23 Nov 2022 16:41:06 +0100 Subject: [PATCH 08/33] Almost ready as a first official draft --- .../published-rest-operation.md | 3 +- .../modeling/integration/rest-binary.md | 114 +++++++++++++----- 2 files changed, 88 insertions(+), 29 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/published-rest-services/published-rest-service/published-rest-operation.md b/content/en/docs/refguide/modeling/integration/published-rest-services/published-rest-service/published-rest-operation.md index 7aeb5688f00..8233ee402df 100644 --- a/content/en/docs/refguide/modeling/integration/published-rest-services/published-rest-service/published-rest-operation.md +++ b/content/en/docs/refguide/modeling/integration/published-rest-services/published-rest-service/published-rest-operation.md @@ -50,7 +50,7 @@ The **Method** and **Operation path** define the operation that is executed for The **Example Location** gives an example of a URL on which the operation can be reached. -#### 2.1.4 Microflow +#### 2.1.4 Microflow {#microflow} An operation can have the following parameters: @@ -80,6 +80,7 @@ The result of the microflow is the result of the operation and can include the f a. Use the [Content-Type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type) header to specify the file's MIME type. b. Use the [Content-Disposition](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition) header to specify the file name and to indicate whether the file should be downloaded as an attachment. c. Use additional HTTP response headers to communicate other information about the file. + See the [Setting Up the MIME Type](/refguide/send-receive-files-rest/#set-mime-type) section of *Publish and Consume Images and Files with REST* for more information. 2. **Return a** ***list*** **or an** ***object*** – specify an export mapping to convert it to XML or JSON. diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 998178d5c84..159399bad73 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -1,14 +1,21 @@ --- -title: "Images and Files with REST" +title: "Publish and Consume Images and Files with REST" url: /refguide/send-receive-files-rest/ -linktitle: "Publish and Consume Images and Files with REST" +linktitle: "Images and Files with REST" weight: 79 tags: ["rest", "binary", "send files", "receive files", "OData", "expose", "published REST service", "consume"] --- ## 1 Introduction -Follow this guide to learn how to publish images and files as REST services. +This guide will cover how to publish images and files as REST services in Studio Pro. The REST service exposes the binary data of the images and files, and can be retrieved to display images and files like PDFs directly in the app or your browser. + +You will learn about the following: + +* [Creating a REST service](#create-service) +* [Trying out, or testing,](#test-service) the service +* [Setting the MIME type](#set-mime-type) for a specific file +* [Creating a client to retrieve files](#retrieve-files) with REST ### 1.1 Prerequisites @@ -16,7 +23,7 @@ To publish or consume files and images with REST, do the following: * Install Studio Pro -We recommend reading the following for more background: +We recommend reading the following for some more background: * [Publishing](/howto/integration/publish-rest-service/) and [consuming](/howto/integration/consume-a-rest-service/) REST services * [Working with images and files](/howto/data-models/working-with-images-and-files/) in Studio Pro @@ -27,24 +34,28 @@ To publish images or files with REST, you need to be using them in your app. Ima Follow [Work with Images and Files](/howto/data-models/working-with-images-and-files/) for step-by-step instructions on setting up these entities and overview pages and using them in your app. -## 3 Publish Images and Files as REST +## 3 Publish Images and Files as REST {#create-service} -We can use this entity as a starting point: +Imagine that your app is functioning as a content management system (CMS), and you want to be able to send and receive images and files. You have an entity that stores the files, which we will use as a starting point: {{< figure src="/attachments/refguide/modeling/integration/rest-binary/starting-entity.png" >}} +### 3.1 Publishing the Service {#publish-service} + To publish the **System.Image** or **System.Filedocument** entities as a [REST service](/refguide/published-rest-service/), do the following: -1. Generate the overview pages if you have not yet done so, and link them to the home page and navigation. +1. Add a new module (or use **MyFirstModule**) and name it **CMS**. + +2. Generate the overview pages if you have not yet done so, and link them to the home page and navigation. * Right click on the **System.Image** or **System.FileDocument** entity that you want to publish, and click **Generate overview pages**. * Add a button to the home page that links to the Overview page you created. -2. Expose the entity as a REST resource. +3. Expose the entity as a REST resource. * Right-click on the **System.Image** or **System.FileDocument** entity that contains the file(s) that you want to publish, and click **Expose as a REST resource**. -3. Click **Select** next to the **Service** field, then click on the folder where you want to create the service and click **New**. Enter a name for the REST service and click **OK**. +4. Click **Select** next to the **Service** field, then click on the folder where you want to create the service and click **New**. Enter a name for the REST service and click **OK**. -4. Back in the **Generate resource and operations** window, select **MyFileID** as the **Key attribute** and check the boxes for the following **Operations***: +5. Back in the **Generate resource and operations** window, select **MyFileID** as the **Key attribute** and check the boxes for the following **Operations***: * **Get all** * **Get by key** * **Post (Create)** @@ -52,35 +63,83 @@ To publish the **System.Image** or **System.Filedocument** entities as a [REST s See the [Operations](/refguide/generate-rest-resource/#operations) section of *Generating a Published REST Resource* for a description of each operation. -5. Click **OK**. The **Published REST service** document for the exposed image or file entity has been created and is now open on your screen. +6. Click **OK**. -### 3.1 Understanding the Service Details +The **Published REST service** document for the exposed image or file entity has been created and is now open on your screen. After you run your app, click the URL in the **Location** field to open the OpenAPI specs. -Open your published REST service, then double-click the **Get by** key, or single-click and click **Edit**, to open the **Get by** property details. By default, the **Get by** key will return a binary response because it will return a **FileDocument**. The **Export mapping** is blank because a binary object without an export mapping returns binary content. +### 3.2 Understanding the Service Details {#service-details} + +Open your published REST service, then double-click the **Get by** key, or single-click and click **Edit**, to open the **Get by** property details. By default, the **Get by** key will return a binary response. The **Export mapping** is blank because a binary object without an export mapping returns binary content. {{< figure src="/attachments/refguide/modeling/integration/rest-binary/no-export-mapping.png" >}} Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFiles_Get_ByKey** microflow. The generated **Get by** key returns a file document. +### 3.3 Setting the MIME Type (For Calling a Specific File) {#set-mime-type} + +A `GET` request to the REST endpoint you created (for example, `http://localhost:8080/rest/restservicename/v1/entityname/`) will return the binary for the uploaded file. But if you are trying to call a specific file, Mendix needs to be told what media type it should expect so that it returns the file in the expected way (for example, displaying an image). + +In the **GET_ByKey** microflow, specify the media type (or MIME type) in the content headers. To learn more about content headers, see the **Return a file document** entry in the [Microflow](/refguide/published-rest-operation/#microflow) section of *Published REST Operation*. Detailed steps are explained below. + +#### 3.3.1 MIME Type for Images {#mime-images} + +In the **GET_ByKey** microflow, do the following: + +1. Drag a **Create Object** action into your microflow just before the **End Event**. +2. In the **Entity** field, select **System.HTTPHeader**. +3. Under the **Refresh in client** field, click **New**. +4. Set the three drop-down options to the following: + * **Key (String (Unlimited))** – set the **Value** to `'Content-Type'` + * **Value (String (Unlimited))** – set the **Value** to `image/png` + * **System.HttpHeaders (System.HttpMessage)** - set the **Value** to `$httpResponse` + +[Add image here] + +#### 3.3.2 MIME Type for PDFs + +Follow the steps in the [MIME Type for Images](#mime-images) section, then set the three drop-down options to the following: + + * **Key (String (Unlimited))** – set the **Value** to `'Content-Type'` + * **Value (String (Unlimited))** – set the **Value** to `application/pdf` + * **System.HttpHeaders (System.HttpMessage)** - set the **Value** to `$httpResponse` + +[Add image here] + +Are there other image types or file types we can add? Is there a list of ones that are supported? + +### 3.4 Testing the Service {#test-service} + +Test the service to ensure that it works! + +1. Run your app and upload a PNG file. + You can upload the files on the overview pages you created in the previous step, so make sure you have a link to the file overview page on your home page. + +2. Back in Studio Pro, open the service document, and click the link to the service to display the OpenAPI doucment (for example, `http://localhost:8080/rest-doc/rest/restfileservice/v1`). + +3. Try it out by clicking **Get/myfiles** > **Try it out** > **Execute**. The contents will display the binary. + You can also test the call in Visual Studio Code using a REST extension doing a `GET http://localhost:8080/rest/tryagain/restfileservice/` call (`Accept: application/json`. + + +4. Clicking **Get/myfiles/{myfileid}** will return the content, but the media type is missing. See [Setting the MIME Type (For Calling a Specific File)](#set-mime-type). + +If you uploaded a PNG, you should actually see the image displayed! + +## 5 Retrieve Images and Files with REST {#retrieve-files} + +Now that you have a published REST service for your image or file entity, implement an API client that will retrieve binary files and store the result in a `FileDocument`. +1. Right-click on the **File Explorer** and select **Add module**, then rename it as **CMSClient**. -## 4 Retrieve Images and Files with REST +2. Add an entity to handle the retrieved files. + * In the **Domain Model**, right click to add an entity called **RetrievedFile**. + * Double-click on the entity to open the **Properties** and select the **Generalization**. To test with the PNG file, we can use **System.Image**. -Now that you have a published REST service for your image or file entity, you need to implement an API client that will retrieve binary files and store the result in a FileDocument. - - RetrievedFile (System.Image) +3. Create a page that will display the published image. + * Right-click on the **CMSClient** module and click **Add page**. + * -Can use an image, let's say a PNG file. -OpenAPI documentation is generated -Get all returns the binary content as a string (if included in the export mapping) -You can also test in VSC with Accept: application/json; same result as above -You can ask for a response in XML (application/xml) -If you ask for a specific FileDocument object, the binary content will be returned. But the correct mimetype is missing (Mendix doesn't know the mediatype of a FileDocument) - - So you can add a mime-type in the microflow returning the file document object - - Response now, viewed in OpenAPI spec and VSC, is actually an image! -## 5 Try It Out -Test page: * Button to retrieve image in a MF * Image widget to directly view the image without a MF REST call * List view to show all retrieved images @@ -88,8 +147,7 @@ Test page: Call rest service: GetImage MF; Call REST (GET)[GetResponseFile] Retrieved File -> Change 'GetResponseFile'. REST Call activity also uses the same API endpoint In the Response: stores the retrieved binary image in the entity provided (GetResponseFile), and refreshes the object in the client so the listview will display the additional retrieved image. The images then show up in your test app -Benefit of not using base64 encoded binaries: API endpoint works everywhere as expected, so you can open the image in the browser -For PDF, all is the same; just change the mime type (application/pdf) in the Create Object part of your microflow +Other points to address: You can upload an example PDF, different location, so no need to update the URL Image viewer doesn't work for PDFs -> needs to be replaced by a different widget to view PDF resources. But opens fine in a browser Easiest way to display a PDF: use an HTML snippet widget to add an embed tag to your page From 25876f67f376110e8061f29e0c2edd273b09d993 Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Wed, 23 Nov 2022 17:12:23 +0100 Subject: [PATCH 09/33] Finish up main steps --- .../modeling/integration/rest-binary.md | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 159399bad73..b09bd511395 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -134,21 +134,31 @@ Now that you have a published REST service for your image or file entity, implem * In the **Domain Model**, right click to add an entity called **RetrievedFile**. * Double-click on the entity to open the **Properties** and select the **Generalization**. To test with the PNG file, we can use **System.Image**. -3. Create a page that will display the published image. - * Right-click on the **CMSClient** module and click **Add page**. - * +3. Create a **GetImage** microflow. + * Right click in the **CMSClient** module and select **Add microflow**. + +4. Drag a **Call REST service** action into the microflow, and set the following properties: + * In the **General** tab: + * **Location** – the URL to your rest service and the specific file (for example, `http://localhost:8080/rest/restservicename/v1/entityname/1`) + * In the **Response** tab: + * **Response handling** – select **Store in a file document + * **Store in variable** – select **Yes** + * **Type** – select the **RetrievedFile** entity + * **Variable Name** – enter `GetResponseFile` + +5. Drag a **Change object** action into the microflow after the **Call REST service** action, so that the list view will display the retrieved image. + * Double click the newly created action to open the properties. + * In the **Object** field, select the **GetResponseFile** variable for the **RetrievedFile** entity. + +6. Create a page that will display the published image, and add a **Get Image** button that will retrieve the image from the **GetImage** microflow. + * Right-click on the **CMSClient** module and click **Add page**. + * Add a **Data grid** on your page. + * The **Data source** is of the type **Database** with the **RetrievedFile** entity. - -* Button to retrieve image in a MF -* Image widget to directly view the image without a MF REST call -* List view to show all retrieved images -* Image widget links to resource endpoint provided by the REST service -Call rest service: GetImage MF; Call REST (GET)[GetResponseFile] Retrieved File -> Change 'GetResponseFile'. REST Call activity also uses the same API endpoint -In the Response: stores the retrieved binary image in the entity provided (GetResponseFile), and refreshes the object in the client so the listview will display the additional retrieved image. The images then show up in your test app - Other points to address: +Call rest service: GetImage MF; Call REST (GET)[GetResponseFile] Retrieved File -> Change 'GetResponseFile'. REST Call activity also uses the same API endpoint +Use Image widget example - Image widget to directly view the image without a MF REST call; Image widget links to resource endpoint provided by the REST service You can upload an example PDF, different location, so no need to update the URL Image viewer doesn't work for PDFs -> needs to be replaced by a different widget to view PDF resources. But opens fine in a browser Easiest way to display a PDF: use an HTML snippet widget to add an embed tag to your page - From 9b1602587d7a94e7a2600c94cb2aa48c766b8e5a Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Tue, 6 Dec 2022 09:29:08 +0100 Subject: [PATCH 10/33] Addressed a few of Joost's comments --- .../refguide/modeling/integration/rest-binary.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index b09bd511395..dd45efc39c3 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -8,18 +8,20 @@ tags: ["rest", "binary", "send files", "receive files", "OData", "expose", "publ ## 1 Introduction -This guide will cover how to publish images and files as REST services in Studio Pro. The REST service exposes the binary data of the images and files, and can be retrieved to display images and files like PDFs directly in the app or your browser. +This guide will cover how to publish files, including images, in REST services in Studio Pro. The REST service exposes the binary data of the files, and you can use it to display images and files like PDFs directly in your app or browser. You will learn about the following: * [Creating a REST service](#create-service) * [Trying out, or testing,](#test-service) the service * [Setting the MIME type](#set-mime-type) for a specific file -* [Creating a client to retrieve files](#retrieve-files) with REST +* [Consuming files](#retrieve-files) with REST + +If you are just interested in consuming REST services in your apps, skip down to the [Retrieve Files with REST](#retrieve-files) section. ### 1.1 Prerequisites -To publish or consume files and images with REST, do the following: +To publish or consume files with REST, do the following: * Install Studio Pro @@ -28,13 +30,13 @@ We recommend reading the following for some more background: * [Publishing](/howto/integration/publish-rest-service/) and [consuming](/howto/integration/consume-a-rest-service/) REST services * [Working with images and files](/howto/data-models/working-with-images-and-files/) in Studio Pro -## 2 Using Images and Files in Your App +## 2 Using Files in Your App To publish images or files with REST, you need to be using them in your app. Images and files you use in your app are stored in **System.Image** and **System.FileDocument** entities. Follow [Work with Images and Files](/howto/data-models/working-with-images-and-files/) for step-by-step instructions on setting up these entities and overview pages and using them in your app. -## 3 Publish Images and Files as REST {#create-service} +## 3 Publish Files as REST {#create-service} Imagine that your app is functioning as a content management system (CMS), and you want to be able to send and receive images and files. You have an entity that stores the files, which we will use as a starting point: @@ -77,7 +79,7 @@ Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFil ### 3.3 Setting the MIME Type (For Calling a Specific File) {#set-mime-type} -A `GET` request to the REST endpoint you created (for example, `http://localhost:8080/rest/restservicename/v1/entityname/`) will return the binary for the uploaded file. But if you are trying to call a specific file, Mendix needs to be told what media type it should expect so that it returns the file in the expected way (for example, displaying an image). +A `GET` request to the REST endpoint you created (for example, `http://localhost:8080/rest/restservicename/v1/entityname/`) will return the binary for the uploaded file. But if you are trying to call a specific file, we need to specify what media type it should expect so that it returns the file in the expected way (for example, displaying an image). In the **GET_ByKey** microflow, specify the media type (or MIME type) in the content headers. To learn more about content headers, see the **Return a file document** entry in the [Microflow](/refguide/published-rest-operation/#microflow) section of *Published REST Operation*. Detailed steps are explained below. @@ -124,7 +126,7 @@ Test the service to ensure that it works! If you uploaded a PNG, you should actually see the image displayed! -## 5 Retrieve Images and Files with REST {#retrieve-files} +## 5 Retrieve Files with REST {#retrieve-files} Now that you have a published REST service for your image or file entity, implement an API client that will retrieve binary files and store the result in a `FileDocument`. From 2a72d6d453c14ccefb45ae7d0e11eba1d7397ced Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Tue, 6 Dec 2022 12:54:11 +0100 Subject: [PATCH 11/33] Update image --- .../modeling/integration/rest-binary.md | 16 ++++++++-------- .../rest-binary/starting-entity.png | Bin 23839 -> 6395 bytes 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index dd45efc39c3..edf57414272 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -8,7 +8,7 @@ tags: ["rest", "binary", "send files", "receive files", "OData", "expose", "publ ## 1 Introduction -This guide will cover how to publish files, including images, in REST services in Studio Pro. The REST service exposes the binary data of the files, and you can use it to display images and files like PDFs directly in your app or browser. +This guide will cover how to publish files, including images, in REST services in Studio Pro, and how to consume them. The REST service exposes the binary data of the files, and you can use it to display images and files like PDFs directly in your app or browser. You will learn about the following: @@ -75,7 +75,7 @@ Open your published REST service, then double-click the **Get by** key, or singl {{< figure src="/attachments/refguide/modeling/integration/rest-binary/no-export-mapping.png" >}} -Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFiles_Get_ByKey** microflow. The generated **Get by** key returns a file document. +Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFile_Get_ByKey** microflow. The generated **Get by** key returns a file document. ### 3.3 Setting the MIME Type (For Calling a Specific File) {#set-mime-type} @@ -83,6 +83,8 @@ A `GET` request to the REST endpoint you created (for example, `http://localhost In the **GET_ByKey** microflow, specify the media type (or MIME type) in the content headers. To learn more about content headers, see the **Return a file document** entry in the [Microflow](/refguide/published-rest-operation/#microflow) section of *Published REST Operation*. Detailed steps are explained below. +See [Common MIME types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types) for a generic, external list of common content header types. + #### 3.3.1 MIME Type for Images {#mime-images} In the **GET_ByKey** microflow, do the following: @@ -92,7 +94,7 @@ In the **GET_ByKey** microflow, do the following: 3. Under the **Refresh in client** field, click **New**. 4. Set the three drop-down options to the following: * **Key (String (Unlimited))** – set the **Value** to `'Content-Type'` - * **Value (String (Unlimited))** – set the **Value** to `image/png` + * **Value (String (Unlimited))** – set the **Value** to `image/png` (or another image type) * **System.HttpHeaders (System.HttpMessage)** - set the **Value** to `$httpResponse` [Add image here] @@ -107,8 +109,6 @@ Follow the steps in the [MIME Type for Images](#mime-images) section, then set t [Add image here] -Are there other image types or file types we can add? Is there a list of ones that are supported? - ### 3.4 Testing the Service {#test-service} Test the service to ensure that it works! @@ -116,13 +116,13 @@ Test the service to ensure that it works! 1. Run your app and upload a PNG file. You can upload the files on the overview pages you created in the previous step, so make sure you have a link to the file overview page on your home page. -2. Back in Studio Pro, open the service document, and click the link to the service to display the OpenAPI doucment (for example, `http://localhost:8080/rest-doc/rest/restfileservice/v1`). +2. Back in Studio Pro, open the service document, and click the link to the service to display the OpenAPI document (for example, `http://localhost:8080/rest-doc/rest/restfileservice/v1`). -3. Try it out by clicking **Get/myfiles** > **Try it out** > **Execute**. The contents will display the binary. +3. Try it out by clicking **Get/myfile** > **Try it out** > **Execute**. The contents will display the binary. You can also test the call in Visual Studio Code using a REST extension doing a `GET http://localhost:8080/rest/tryagain/restfileservice/` call (`Accept: application/json`. -4. Clicking **Get/myfiles/{myfileid}** will return the content, but the media type is missing. See [Setting the MIME Type (For Calling a Specific File)](#set-mime-type). +4. Clicking **Get/myfile/{myfileid}** will return the content, but the media type is missing. See [Setting the MIME Type (For Calling a Specific File)](#set-mime-type). If you uploaded a PNG, you should actually see the image displayed! diff --git a/static/attachments/refguide/modeling/integration/rest-binary/starting-entity.png b/static/attachments/refguide/modeling/integration/rest-binary/starting-entity.png index 14510faeb9f66de6791599d5e82d088acdcaf11e..6a8ef1617d14264783c9b93cec37a2605d27d39f 100644 GIT binary patch literal 6395 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 From 976e69590a36489535801fb26766c48b47680d25 Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 12 Dec 2022 13:17:24 +0100 Subject: [PATCH 12/33] Style fix --- .../published-rest-services/generate-rest-resource.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/refguide/modeling/integration/published-rest-services/generate-rest-resource.md b/content/en/docs/refguide/modeling/integration/published-rest-services/generate-rest-resource.md index b0daeda4fc9..b240c7fa0ea 100644 --- a/content/en/docs/refguide/modeling/integration/published-rest-services/generate-rest-resource.md +++ b/content/en/docs/refguide/modeling/integration/published-rest-services/generate-rest-resource.md @@ -28,7 +28,7 @@ To be able to create a **Get by key**, a **Patch** or a **Delete** operation, th ## 4 Operations {#operations} -Check the operations that you want to generate: +Select the check box for the operations that you want to generate: * **Get all** – allows clients to get all the objects * **Get by key** – allows clients to get an object, given its key From 0a5849f961b9b6715b1acda799d3fc49d33f0ece Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 19 Dec 2022 13:40:02 +0100 Subject: [PATCH 13/33] Small clarification --- content/en/docs/refguide/modeling/integration/rest-binary.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index edf57414272..92610fd674c 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -48,7 +48,7 @@ To publish the **System.Image** or **System.Filedocument** entities as a [REST s 1. Add a new module (or use **MyFirstModule**) and name it **CMS**. -2. Generate the overview pages if you have not yet done so, and link them to the home page and navigation. +2. Go to the domain model and generate the overview pages if you have not yet done so, and link them to the home page and navigation. * Right click on the **System.Image** or **System.FileDocument** entity that you want to publish, and click **Generate overview pages**. * Add a button to the home page that links to the Overview page you created. From 4a0bb5380f19988cae4a2eb0d84d8e4504d2319d Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 19 Dec 2022 14:29:07 +0100 Subject: [PATCH 14/33] A change --- .../en/docs/refguide/modeling/integration/rest-binary.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 92610fd674c..68e72d4fcf4 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -12,7 +12,7 @@ This guide will cover how to publish files, including images, in REST services i You will learn about the following: -* [Creating a REST service](#create-service) +* [Creating a REST service](#create-service) with a **System.Image** or **System.FileDocument** entity * [Trying out, or testing,](#test-service) the service * [Setting the MIME type](#set-mime-type) for a specific file * [Consuming files](#retrieve-files) with REST @@ -48,9 +48,9 @@ To publish the **System.Image** or **System.Filedocument** entities as a [REST s 1. Add a new module (or use **MyFirstModule**) and name it **CMS**. -2. Go to the domain model and generate the overview pages if you have not yet done so, and link them to the home page and navigation. +2. Go to the domain model, generate the overview pages for the file or image entity if you have not yet done so, then link them to the home page and navigation. * Right click on the **System.Image** or **System.FileDocument** entity that you want to publish, and click **Generate overview pages**. - * Add a button to the home page that links to the Overview page you created. + * Add a button to the home page that links to the **Overview** page you created. 3. Expose the entity as a REST resource. * Right-click on the **System.Image** or **System.FileDocument** entity that contains the file(s) that you want to publish, and click **Expose as a REST resource**. From 56201d6abc6b669aff9e8811f1da33f597cad513 Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Thu, 22 Dec 2022 12:28:03 +0100 Subject: [PATCH 15/33] A few updates --- .../en/docs/refguide/modeling/integration/rest-binary.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 68e72d4fcf4..28a726d8d29 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -81,7 +81,7 @@ Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFil A `GET` request to the REST endpoint you created (for example, `http://localhost:8080/rest/restservicename/v1/entityname/`) will return the binary for the uploaded file. But if you are trying to call a specific file, we need to specify what media type it should expect so that it returns the file in the expected way (for example, displaying an image). -In the **GET_ByKey** microflow, specify the media type (or MIME type) in the content headers. To learn more about content headers, see the **Return a file document** entry in the [Microflow](/refguide/published-rest-operation/#microflow) section of *Published REST Operation*. Detailed steps are explained below. +In the **GET_ByKey** microflow, specify the media type (or MIME type) in the content headers. To learn more about content headers in microflows, see the **Return a file document** entry in the [Microflow](/refguide/published-rest-operation/#microflow) section of *Published REST Operation*. Detailed steps are explained below. See [Common MIME types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types) for a generic, external list of common content header types. @@ -94,7 +94,7 @@ In the **GET_ByKey** microflow, do the following: 3. Under the **Refresh in client** field, click **New**. 4. Set the three drop-down options to the following: * **Key (String (Unlimited))** – set the **Value** to `'Content-Type'` - * **Value (String (Unlimited))** – set the **Value** to `image/png` (or another image type) + * **Value (String (Unlimited))** – set the **Value** to `'image/png'` (or another image type) * **System.HttpHeaders (System.HttpMessage)** - set the **Value** to `$httpResponse` [Add image here] @@ -104,7 +104,7 @@ In the **GET_ByKey** microflow, do the following: Follow the steps in the [MIME Type for Images](#mime-images) section, then set the three drop-down options to the following: * **Key (String (Unlimited))** – set the **Value** to `'Content-Type'` - * **Value (String (Unlimited))** – set the **Value** to `application/pdf` + * **Value (String (Unlimited))** – set the **Value** to `'application/pdf'` * **System.HttpHeaders (System.HttpMessage)** - set the **Value** to `$httpResponse` [Add image here] @@ -128,7 +128,7 @@ If you uploaded a PNG, you should actually see the image displayed! ## 5 Retrieve Files with REST {#retrieve-files} -Now that you have a published REST service for your image or file entity, implement an API client that will retrieve binary files and store the result in a `FileDocument`. +You can implement an API client in your app that will retrieve binary files and store them in a `FileDocument` entity. 1. Right-click on the **File Explorer** and select **Add module**, then rename it as **CMSClient**. From 60574e54b24dd6d0ae93a730628ab0c5ab50e8e5 Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Sat, 31 Dec 2022 14:54:46 +0100 Subject: [PATCH 16/33] Add a few links --- .../activities/integration-activities/call-rest-action.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/refguide/modeling/application-logic/microflows-and-nanoflows/activities/integration-activities/call-rest-action.md b/content/en/docs/refguide/modeling/application-logic/microflows-and-nanoflows/activities/integration-activities/call-rest-action.md index 3b6020ca1e0..42001dc1864 100644 --- a/content/en/docs/refguide/modeling/application-logic/microflows-and-nanoflows/activities/integration-activities/call-rest-action.md +++ b/content/en/docs/refguide/modeling/application-logic/microflows-and-nanoflows/activities/integration-activities/call-rest-action.md @@ -170,7 +170,7 @@ If the [export mapping](/refguide/export-mappings/) is based on a message defini ### 6.2 Binary for the Entire Request -This option allows you to send binary data (for example, the contents of a FileDocument). +This option allows you to send binary data (for example, the contents of a FileDocument). See [Send and Receive Files with REST](/reguide/rest-binary) for detailed information working with files with REST). ### 6.3 Form-Data @@ -202,7 +202,7 @@ These are the options in the drop-down menu for handling the response: * **Apply import mapping** – if the response is JSON or XML, it can be transformed directly into objects using an [import mapping](/refguide/import-mappings/); the fields that you can choose here are described in the [Import Mapping action](/refguide/import-mapping-action/) * **Store in an HTTP response** – any successful HTTP response can be stored directly in an [HttpResponse](/refguide/http-request-and-response-entities/#http-response) object, and the [$latestHttpResponse](#latesthttpresponse) variable is also updated -* **Store in a file document** – if the response contains binary content (for example, a PDF), it can be stored in an object of an entity type which inherits from `System.FileDocument` +* **Store in a file document** – if the response contains binary content (for example, a PDF), it can be stored in an object of an entity type which inherits from `System.FileDocument` (see [Send and Receive Files with REST](/reguide/rest-binary) for detailed information working with files with REST) * **Store in a string** – if the response is a string (for example, CSV), it can be stored directly in a string variable * **Do not store in a variable** - use this option when the call does not return anything useful From 4d4cecaeca0d0a0506d5d17358a1b22500f1e5da Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 2 Jan 2023 14:41:18 +0100 Subject: [PATCH 17/33] Cleaning a bit up --- .../modeling/integration/rest-binary.md | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 28a726d8d29..d4a03aaae25 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -17,7 +17,7 @@ You will learn about the following: * [Setting the MIME type](#set-mime-type) for a specific file * [Consuming files](#retrieve-files) with REST -If you are just interested in consuming REST services in your apps, skip down to the [Retrieve Files with REST](#retrieve-files) section. +If you are only interested in consuming REST services in your apps, skip down to the [Retrieve Files with REST](#retrieve-files) section. ### 1.1 Prerequisites @@ -30,19 +30,13 @@ We recommend reading the following for some more background: * [Publishing](/howto/integration/publish-rest-service/) and [consuming](/howto/integration/consume-a-rest-service/) REST services * [Working with images and files](/howto/data-models/working-with-images-and-files/) in Studio Pro -## 2 Using Files in Your App - -To publish images or files with REST, you need to be using them in your app. Images and files you use in your app are stored in **System.Image** and **System.FileDocument** entities. - -Follow [Work with Images and Files](/howto/data-models/working-with-images-and-files/) for step-by-step instructions on setting up these entities and overview pages and using them in your app. - -## 3 Publish Files as REST {#create-service} +## 2 Publish Files with REST {#create-service} Imagine that your app is functioning as a content management system (CMS), and you want to be able to send and receive images and files. You have an entity that stores the files, which we will use as a starting point: {{< figure src="/attachments/refguide/modeling/integration/rest-binary/starting-entity.png" >}} -### 3.1 Publishing the Service {#publish-service} +### 2.1 Publishing the Service {#publish-service} To publish the **System.Image** or **System.Filedocument** entities as a [REST service](/refguide/published-rest-service/), do the following: @@ -69,7 +63,7 @@ To publish the **System.Image** or **System.Filedocument** entities as a [REST s The **Published REST service** document for the exposed image or file entity has been created and is now open on your screen. After you run your app, click the URL in the **Location** field to open the OpenAPI specs. -### 3.2 Understanding the Service Details {#service-details} +### 2.2 Understanding the Service Details {#service-details} Open your published REST service, then double-click the **Get by** key, or single-click and click **Edit**, to open the **Get by** property details. By default, the **Get by** key will return a binary response. The **Export mapping** is blank because a binary object without an export mapping returns binary content. @@ -77,7 +71,7 @@ Open your published REST service, then double-click the **Get by** key, or singl Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFile_Get_ByKey** microflow. The generated **Get by** key returns a file document. -### 3.3 Setting the MIME Type (For Calling a Specific File) {#set-mime-type} +### 2.3 Setting the MIME Type (For Calling a Specific File) {#set-mime-type} A `GET` request to the REST endpoint you created (for example, `http://localhost:8080/rest/restservicename/v1/entityname/`) will return the binary for the uploaded file. But if you are trying to call a specific file, we need to specify what media type it should expect so that it returns the file in the expected way (for example, displaying an image). @@ -85,7 +79,7 @@ In the **GET_ByKey** microflow, specify the media type (or MIME type) in the con See [Common MIME types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types) for a generic, external list of common content header types. -#### 3.3.1 MIME Type for Images {#mime-images} +#### 2.3.1 MIME Type for Images {#mime-images} In the **GET_ByKey** microflow, do the following: @@ -99,7 +93,7 @@ In the **GET_ByKey** microflow, do the following: [Add image here] -#### 3.3.2 MIME Type for PDFs +#### 2.3.2 MIME Type for PDFs Follow the steps in the [MIME Type for Images](#mime-images) section, then set the three drop-down options to the following: @@ -109,7 +103,7 @@ Follow the steps in the [MIME Type for Images](#mime-images) section, then set t [Add image here] -### 3.4 Testing the Service {#test-service} +### 2.4 Testing the Service {#test-service} Test the service to ensure that it works! @@ -126,9 +120,9 @@ Test the service to ensure that it works! If you uploaded a PNG, you should actually see the image displayed! -## 5 Retrieve Files with REST {#retrieve-files} +## 3 Consume Files with REST {#retrieve-files} -You can implement an API client in your app that will retrieve binary files and store them in a `FileDocument` entity. +You can implement an API client in your app that will retrieve binary files from any published REST service, from a Mendix app or anywhere else, and store them in a `FileDocument` entity. 1. Right-click on the **File Explorer** and select **Add module**, then rename it as **CMSClient**. From 226948bfa9447d46ee0d949c1ea68cb80c7be88c Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 6 Feb 2023 17:32:13 +0100 Subject: [PATCH 18/33] Small changes and additional notes --- .../en/docs/refguide/modeling/integration/rest-binary.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index d4a03aaae25..f26820636ff 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -88,10 +88,10 @@ In the **GET_ByKey** microflow, do the following: 3. Under the **Refresh in client** field, click **New**. 4. Set the three drop-down options to the following: * **Key (String (Unlimited))** – set the **Value** to `'Content-Type'` - * **Value (String (Unlimited))** – set the **Value** to `'image/png'` (or another image type) + * **Value (String (Unlimited))** – set the **Value** to `'image/png'` * **System.HttpHeaders (System.HttpMessage)** - set the **Value** to `$httpResponse` -[Add image here] + #### 2.3.2 MIME Type for PDFs @@ -158,3 +158,8 @@ Use Image widget example - Image widget to directly view the image without a MF You can upload an example PDF, different location, so no need to update the URL Image viewer doesn't work for PDFs -> needs to be replaced by a different widget to view PDF resources. But opens fine in a browser Easiest way to display a PDF: use an HTML snippet widget to add an embed tag to your page + + + With developer you mean the developer of the API? This developer can check the content-type header to check if the mime-type of the payload is supported. So the client will tell the service: i'm sending you an image/jpg, and the API can process this or reject it. If the API doesn't support jpg it can return a 415 status code (https://stackoverflow.com/questions/11461037/appropriate-http-status-code-for-request-specifying-invalid-content-encoding-hea) + + What confused me in the docs is that it seemed to suggest that the binary would automatically be converted into the requested mime-type. If the mendix file document contains a jpg, but the client requests a png, simply specifying png as the content type in the api microflow will not result in a png. The microflow will need to explicitly convert the jpg to a png. \ No newline at end of file From 6c00b78d8fc2de142a2f2905f4f46eb8f901b58d Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 6 Feb 2023 21:25:23 +0100 Subject: [PATCH 19/33] Several changes --- .../modeling/integration/rest-binary.md | 114 ++++++++++-------- 1 file changed, 62 insertions(+), 52 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index f26820636ff..e5600fcb81d 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -1,5 +1,5 @@ --- -title: "Publish and Consume Images and Files with REST" +title: "Publish and Retrieve Images and Files with REST" url: /refguide/send-receive-files-rest/ linktitle: "Images and Files with REST" weight: 79 @@ -8,17 +8,15 @@ tags: ["rest", "binary", "send files", "receive files", "OData", "expose", "publ ## 1 Introduction -This guide will cover how to publish files, including images, in REST services in Studio Pro, and how to consume them. The REST service exposes the binary data of the files, and you can use it to display images and files like PDFs directly in your app or browser. +This guide will cover how to publish and consume (or send and retrieve) files, including images, in REST services in Studio Pro. The REST service exposes the binary data of the files, and you can use it to display images and files like PDFs directly in your app or browser. You will learn about the following: * [Creating a REST service](#create-service) with a **System.Image** or **System.FileDocument** entity -* [Trying out, or testing,](#test-service) the service -* [Setting the MIME type](#set-mime-type) for a specific file + * [Trying out, or testing,](#test-service) the service + * [Setting the MIME type](#set-mime-type) for a specific file * [Consuming files](#retrieve-files) with REST -If you are only interested in consuming REST services in your apps, skip down to the [Retrieve Files with REST](#retrieve-files) section. - ### 1.1 Prerequisites To publish or consume files with REST, do the following: @@ -40,30 +38,29 @@ Imagine that your app is functioning as a content management system (CMS), and y To publish the **System.Image** or **System.Filedocument** entities as a [REST service](/refguide/published-rest-service/), do the following: -1. Add a new module (or use **MyFirstModule**) and name it **CMS**. - -2. Go to the domain model, generate the overview pages for the file or image entity if you have not yet done so, then link them to the home page and navigation. - * Right click on the **System.Image** or **System.FileDocument** entity that you want to publish, and click **Generate overview pages**. - * Add a button to the home page that links to the **Overview** page you created. +1. Add a new module (or use **MyFirstModule**) and name it **CMS**. + +2. Go to the domain model, generate the overview pages for the file or image entity if you have not yet done so, then link them to the home page and navigation. + * Right click on the **System.Image** or **System.FileDocument** entity that you want to publish, and click **Generate overview pages**. + * Add a button to the home page that links to the **Overview** page you created. -3. Expose the entity as a REST resource. - * Right-click on the **System.Image** or **System.FileDocument** entity that contains the file(s) that you want to publish, and click **Expose as a REST resource**. +3. Expose the entity as a REST resource. + * Right-click on the **System.Image** or **System.FileDocument** entity that contains the file(s) that you want to publish, and click **Expose as a REST resource**. + * Click **Select** next to the **Service** field, then click on the folder where you want to create the service and click **New**. Enter a name for the REST service and click **OK**. -4. Click **Select** next to the **Service** field, then click on the folder where you want to create the service and click **New**. Enter a name for the REST service and click **OK**. - -5. Back in the **Generate resource and operations** window, select **MyFileID** as the **Key attribute** and check the boxes for the following **Operations***: - * **Get all** - * **Get by key** - * **Post (Create)** - * **Delete** +4. Back in the **Generate resource and operations** window, select **MyFileID** as the **Key attribute** and check the boxes for the following **Operations***: + * **Get all** + * **Get by key** + * **Post (Create)** + * **Delete** - See the [Operations](/refguide/generate-rest-resource/#operations) section of *Generating a Published REST Resource* for a description of each operation. + See the [Operations](/refguide/generate-rest-resource/#operations) section of *Generating a Published REST Resource* for a description of each operation. -6. Click **OK**. +5. Click **OK**. The **Published REST service** document for the exposed image or file entity has been created and is now open on your screen. After you run your app, click the URL in the **Location** field to open the OpenAPI specs. -### 2.2 Understanding the Service Details {#service-details} +### 2.1.1 Understanding the Service Details {#service-details} Open your published REST service, then double-click the **Get by** key, or single-click and click **Edit**, to open the **Get by** property details. By default, the **Get by** key will return a binary response. The **Export mapping** is blank because a binary object without an export mapping returns binary content. @@ -71,9 +68,9 @@ Open your published REST service, then double-click the **Get by** key, or singl Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFile_Get_ByKey** microflow. The generated **Get by** key returns a file document. -### 2.3 Setting the MIME Type (For Calling a Specific File) {#set-mime-type} +### 2.2 Setting the MIME Type in a GET Microflow {#set-mime-type} -A `GET` request to the REST endpoint you created (for example, `http://localhost:8080/rest/restservicename/v1/entityname/`) will return the binary for the uploaded file. But if you are trying to call a specific file, we need to specify what media type it should expect so that it returns the file in the expected way (for example, displaying an image). +A `GET` request to the REST endpoint you created (in this example, `http://localhost:8080/rest/cmsapi/v1/myfile/1`) will return the binary for the first uploaded file. We need to specify the expected media type so that it returns the file in the expected way (for example, displaying an image). In the **GET_ByKey** microflow, specify the media type (or MIME type) in the content headers. To learn more about content headers in microflows, see the **Return a file document** entry in the [Microflow](/refguide/published-rest-operation/#microflow) section of *Published REST Operation*. Detailed steps are explained below. @@ -88,11 +85,9 @@ In the **GET_ByKey** microflow, do the following: 3. Under the **Refresh in client** field, click **New**. 4. Set the three drop-down options to the following: * **Key (String (Unlimited))** – set the **Value** to `'Content-Type'` - * **Value (String (Unlimited))** – set the **Value** to `'image/png'` + * **Value (String (Unlimited))** – set the **Value** to `'image/png'`, or the image type that will be returned * **System.HttpHeaders (System.HttpMessage)** - set the **Value** to `$httpResponse` - - #### 2.3.2 MIME Type for PDFs Follow the steps in the [MIME Type for Images](#mime-images) section, then set the three drop-down options to the following: @@ -107,49 +102,62 @@ Follow the steps in the [MIME Type for Images](#mime-images) section, then set t Test the service to ensure that it works! -1. Run your app and upload a PNG file. - You can upload the files on the overview pages you created in the previous step, so make sure you have a link to the file overview page on your home page. +1. Run your app and upload a PNG file. + You can upload the files on the overview pages you created in the previous step, so make sure you have a link to the file overview page on your home page. -2. Back in Studio Pro, open the service document, and click the link to the service to display the OpenAPI document (for example, `http://localhost:8080/rest-doc/rest/restfileservice/v1`). +2. Back in Studio Pro, open the service document, and click the link to the service to display the OpenAPI document (for example, `http://localhost:8080/rest-doc/rest/cmsapi/v1`). -3. Try it out by clicking **Get/myfile** > **Try it out** > **Execute**. The contents will display the binary. - You can also test the call in Visual Studio Code using a REST extension doing a `GET http://localhost:8080/rest/tryagain/restfileservice/` call (`Accept: application/json`. +3. Try it out by clicking **Get/myfile/{myfileid}** > **Try it out** > **Execute**. The contents will display the binary. + You can also test the call in Visual Studio Code using the [REST Client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) extension by making the following call: + ``` + GET http://localhost:8080/rest/cmsapi/v1/myfile/1 + Accept: image/png` + ``` -4. Clicking **Get/myfile/{myfileid}** will return the content, but the media type is missing. See [Setting the MIME Type (For Calling a Specific File)](#set-mime-type). +4. Click **Get/myfile/{myfileid}** to return the content, and you should see the PNG displayed. If you only see the binary, make sure that you have [set the MIME Type](#set-mime-type). -If you uploaded a PNG, you should actually see the image displayed! +## 3 Retrieve Files with REST {#retrieve-files} -## 3 Consume Files with REST {#retrieve-files} +You can implement a client in your app that will retrieve binary files from any published REST service, from a Mendix app or anywhere else, and store them in a `FileDocument` entity. -You can implement an API client in your app that will retrieve binary files from any published REST service, from a Mendix app or anywhere else, and store them in a `FileDocument` entity. +1. Right-click on the **File Explorer** and select **Add module**, then rename it as **CMSClient**. -1. Right-click on the **File Explorer** and select **Add module**, then rename it as **CMSClient**. - -2. Add an entity to handle the retrieved files. - * In the **Domain Model**, right click to add an entity called **RetrievedFile**. +2. Add an entity to handle the retrieved files. + * In the **Domain Model**, right click to add an entity called **RetrievedFile**. * Double-click on the entity to open the **Properties** and select the **Generalization**. To test with the PNG file, we can use **System.Image**. -3. Create a **GetImage** microflow. +Then, you can use the image or PDF with the [Image] widget, an [HTML snippet] widget for PDFs, or a microflow. + +### 3.1 Retrieving Images with the Image Widget + +Retrieve images with the URL of the published REST service by using the [Image](/appstore/widgets/image/) widget available on the Mendix Marketplace. + + + +### 3.2 Retrieving PDFs with the HTML/Javascript Snippet Widget + +Retrieve PDFs with the URL of the published REST service by using the [HTML/Javascript Snippet](/appstore/widgets/html-javascript-snippet/) widget available on the Mendix Marketplace. + +### 3.3 Retrieving Files in a Microflow + +1. Create a **GetImage** (or **GetFile**) microflow. * Right click in the **CMSClient** module and select **Add microflow**. -4. Drag a **Call REST service** action into the microflow, and set the following properties: +2. Drag a **Call REST service** action into the microflow, and set the following properties: * In the **General** tab: - * **Location** – the URL to your rest service and the specific file (for example, `http://localhost:8080/rest/restservicename/v1/entityname/1`) - * In the **Response** tab: - * **Response handling** – select **Store in a file document + * **Location** – the URL to your rest service and the specific file (for example, `http://localhost:8080/rest/cmsapi/v1/myfile/1`) + * In the **Response** tab: + * **Response handling** – select **Store in a file document** * **Store in variable** – select **Yes** * **Type** – select the **RetrievedFile** entity * **Variable Name** – enter `GetResponseFile` -5. Drag a **Change object** action into the microflow after the **Call REST service** action, so that the list view will display the retrieved image. +5. Drag a **Change object** action into the microflow after the **Call REST service** action, so that the list view will display the retrieved image. * Double click the newly created action to open the properties. * In the **Object** field, select the **GetResponseFile** variable for the **RetrievedFile** entity. -6. Create a page that will display the published image, and add a **Get Image** button that will retrieve the image from the **GetImage** microflow. - * Right-click on the **CMSClient** module and click **Add page**. - * Add a **Data grid** on your page. - * The **Data source** is of the type **Database** with the **RetrievedFile** entity. + Other points to address: @@ -162,4 +170,6 @@ Easiest way to display a PDF: use an HTML snippet widget to add an embed tag to With developer you mean the developer of the API? This developer can check the content-type header to check if the mime-type of the payload is supported. So the client will tell the service: i'm sending you an image/jpg, and the API can process this or reject it. If the API doesn't support jpg it can return a 415 status code (https://stackoverflow.com/questions/11461037/appropriate-http-status-code-for-request-specifying-invalid-content-encoding-hea) - What confused me in the docs is that it seemed to suggest that the binary would automatically be converted into the requested mime-type. If the mendix file document contains a jpg, but the client requests a png, simply specifying png as the content type in the api microflow will not result in a png. The microflow will need to explicitly convert the jpg to a png. \ No newline at end of file + What confused me in the docs is that it seemed to suggest that the binary would automatically be converted into the requested mime-type. If the mendix file document contains a jpg, but the client requests a png, simply specifying png as the content type in the api microflow will not result in a png. The microflow will need to explicitly convert the jpg to a png. + + \ No newline at end of file From b1ba08e4292e0c8c9dc82ee7a77751f8ec8bb917 Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 6 Feb 2023 21:57:41 +0100 Subject: [PATCH 20/33] Clean up sections --- .../modeling/integration/rest-binary.md | 58 ++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index e5600fcb81d..84303bca7cc 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -15,7 +15,9 @@ You will learn about the following: * [Creating a REST service](#create-service) with a **System.Image** or **System.FileDocument** entity * [Trying out, or testing,](#test-service) the service * [Setting the MIME type](#set-mime-type) for a specific file -* [Consuming files](#retrieve-files) with REST +* [Retrieving files](#retrieve-files) with REST + +If you are only interesting in consuming files, you can skip down to the [Retrieving Images and Files with REST](#retrieve-files) section. ### 1.1 Prerequisites @@ -96,8 +98,6 @@ Follow the steps in the [MIME Type for Images](#mime-images) section, then set t * **Value (String (Unlimited))** – set the **Value** to `'application/pdf'` * **System.HttpHeaders (System.HttpMessage)** - set the **Value** to `$httpResponse` -[Add image here] - ### 2.4 Testing the Service {#test-service} Test the service to ensure that it works! @@ -117,7 +117,7 @@ Test the service to ensure that it works! 4. Click **Get/myfile/{myfileid}** to return the content, and you should see the PNG displayed. If you only see the binary, make sure that you have [set the MIME Type](#set-mime-type). -## 3 Retrieve Files with REST {#retrieve-files} +## 3 Retrieve Images or Files with REST {#retrieve-files} You can implement a client in your app that will retrieve binary files from any published REST service, from a Mendix app or anywhere else, and store them in a `FileDocument` entity. @@ -125,21 +125,43 @@ You can implement a client in your app that will retrieve binary files from any 2. Add an entity to handle the retrieved files. * In the **Domain Model**, right click to add an entity called **RetrievedFile**. - * Double-click on the entity to open the **Properties** and select the **Generalization**. To test with the PNG file, we can use **System.Image**. + * Double-click on the entity to open the **Properties** and select the **Generalization**. To test with the PNG file, we can use **System.Image**, or **System.FileDocument** if you want to work with a PDF file. -Then, you can use the image or PDF with the [Image] widget, an [HTML snippet] widget for PDFs, or a microflow. +Then, you can retrieve the image with the [Image widget](#image-widget), retrieve a PDF with the [HTML/Javascript snippet widget](#html-snippet) for PDFs, or [retrieve images or PDFs with a microflow](#retrieve-microflow). -### 3.1 Retrieving Images with the Image Widget +### 3.1 Retrieving Images with the Image Widget {#image-widget} Retrieve images with the URL of the published REST service by using the [Image](/appstore/widgets/image/) widget available on the Mendix Marketplace. +Complete the steps in [Retrieve Files with REST](#retrieve-files), then do the following: +1. Download the [Image](/appstore/widgets/image/) widget from the Mendix Marketplace and import it into your app. +2. In the [Toolbox](/refguide/toolbox/), click **Widgets** and search for "Image". +3. Drag the **Image** widget onto a page. +4. Double-click the widget you dragged onto your page to open the **Properties**. +5. In the **Data source** field, select the **Image URL** for **Image type**. +6. Paste the location of the file in the REST service (for example, `http://localhost:8080/rest/cmsapi/v1/myfile/1`). -### 3.2 Retrieving PDFs with the HTML/Javascript Snippet Widget +### 3.2 Retrieving PDFs with the HTML/Javascript Snippet Widget {#html-snippet} Retrieve PDFs with the URL of the published REST service by using the [HTML/Javascript Snippet](/appstore/widgets/html-javascript-snippet/) widget available on the Mendix Marketplace. -### 3.3 Retrieving Files in a Microflow +Complete the steps in [Retrieve Files with REST](#retrieve-files), then do the following: + +1. Download the [HTML/Javascript Snippet](/appstore/widgets/html-javascript-snippet) widget from the Mendix Marketplace and import it into your app. +2. In the [Toolbox](/refguide/toolbox/), click **Widgets** and search for "HTMLSnippet". +3. Drag the **HTMLSnippet** widget onto a page. +4. Double-click the widget you dragged onto your page to open the **Properties**. +5. In the **Content Type** field, ensure that **HTML** is selected. +6. In the **Contents** field, paste the HTML that includes the REST endpoint. For example: + +```html + +``` + +### 3.3 Retrieving Files in a Microflow {#microflow-retrieve} + +Complete the steps in [Retrieve Files with REST](#retrieve-files), then do the following: 1. Create a **GetImage** (or **GetFile**) microflow. * Right click in the **CMSClient** module and select **Add microflow**. @@ -156,20 +178,4 @@ Retrieve PDFs with the URL of the published REST service by using the [HTML/Java 5. Drag a **Change object** action into the microflow after the **Call REST service** action, so that the list view will display the retrieved image. * Double click the newly created action to open the properties. * In the **Object** field, select the **GetResponseFile** variable for the **RetrievedFile** entity. - - - - -Other points to address: -Call rest service: GetImage MF; Call REST (GET)[GetResponseFile] Retrieved File -> Change 'GetResponseFile'. REST Call activity also uses the same API endpoint -Use Image widget example - Image widget to directly view the image without a MF REST call; Image widget links to resource endpoint provided by the REST service -You can upload an example PDF, different location, so no need to update the URL -Image viewer doesn't work for PDFs -> needs to be replaced by a different widget to view PDF resources. But opens fine in a browser -Easiest way to display a PDF: use an HTML snippet widget to add an embed tag to your page - - - With developer you mean the developer of the API? This developer can check the content-type header to check if the mime-type of the payload is supported. So the client will tell the service: i'm sending you an image/jpg, and the API can process this or reject it. If the API doesn't support jpg it can return a 415 status code (https://stackoverflow.com/questions/11461037/appropriate-http-status-code-for-request-specifying-invalid-content-encoding-hea) - - What confused me in the docs is that it seemed to suggest that the binary would automatically be converted into the requested mime-type. If the mendix file document contains a jpg, but the client requests a png, simply specifying png as the content type in the api microflow will not result in a png. The microflow will need to explicitly convert the jpg to a png. - - \ No newline at end of file + * In the **Refresh in client** field, select **Yes**. \ No newline at end of file From 5c30d6622c64b117ae228c81701ebfaea6dfec3a Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Tue, 7 Feb 2023 18:48:17 +0100 Subject: [PATCH 21/33] More cleaning --- .../modeling/integration/rest-binary.md | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 84303bca7cc..68076ec0f74 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -8,22 +8,22 @@ tags: ["rest", "binary", "send files", "receive files", "OData", "expose", "publ ## 1 Introduction -This guide will cover how to publish and consume (or send and retrieve) files, including images, in REST services in Studio Pro. The REST service exposes the binary data of the files, and you can use it to display images and files like PDFs directly in your app or browser. +This guide will cover how to use REST to send and retrieve files, including images, in Studio Pro. You will learn about the following: -* [Creating a REST service](#create-service) with a **System.Image** or **System.FileDocument** entity +* [Creating a REST service](#create-service) from a **System.Image** or **System.FileDocument** entity * [Trying out, or testing,](#test-service) the service - * [Setting the MIME type](#set-mime-type) for a specific file + * [Setting the MIME type](#set-mime-type) for supported files * [Retrieving files](#retrieve-files) with REST If you are only interesting in consuming files, you can skip down to the [Retrieving Images and Files with REST](#retrieve-files) section. -### 1.1 Prerequisites +### 1.1 Prerequisites -To publish or consume files with REST, do the following: +To publish or retrieve files with REST, do the following: -* Install Studio Pro +* Install Studio Pro We recommend reading the following for some more background: @@ -32,25 +32,29 @@ We recommend reading the following for some more background: ## 2 Publish Files with REST {#create-service} -Imagine that your app is functioning as a content management system (CMS), and you want to be able to send and receive images and files. You have an entity that stores the files, which we will use as a starting point: - -{{< figure src="/attachments/refguide/modeling/integration/rest-binary/starting-entity.png" >}} +Imagine that your app is functioning as a content management system (CMS), and you want to be able to send and receive images and files. You can publish the generalized entities as a REST service, which exposes the binary data of files stored in the entity. ### 2.1 Publishing the Service {#publish-service} To publish the **System.Image** or **System.Filedocument** entities as a [REST service](/refguide/published-rest-service/), do the following: -1. Add a new module (or use **MyFirstModule**) and name it **CMS**. +1. Add a new module (or use **MyFirstModule**) and name it **CMS**. + +2. Go to the domain model and create a new entity called *MyFile*. + +3. Add a **System.Image** or **System.FileDocument** [generalization](/refguide/entities/#generalization) to the *MyFile* entity + + {{< figure src="/attachments/refguide/modeling/integration/rest-binary/starting-entity.png" >}} -2. Go to the domain model, generate the overview pages for the file or image entity if you have not yet done so, then link them to the home page and navigation. +4. Generate the overview pages for the file or image entity, then link them to the home page and navigation. * Right click on the **System.Image** or **System.FileDocument** entity that you want to publish, and click **Generate overview pages**. * Add a button to the home page that links to the **Overview** page you created. -3. Expose the entity as a REST resource. +5. Expose the entity as a REST resource. * Right-click on the **System.Image** or **System.FileDocument** entity that contains the file(s) that you want to publish, and click **Expose as a REST resource**. * Click **Select** next to the **Service** field, then click on the folder where you want to create the service and click **New**. Enter a name for the REST service and click **OK**. -4. Back in the **Generate resource and operations** window, select **MyFileID** as the **Key attribute** and check the boxes for the following **Operations***: +6. Back in the **Generate resource and operations** window, select **MyFileID** as the **Key attribute** and check the boxes for the following **Operations***: * **Get all** * **Get by key** * **Post (Create)** @@ -58,7 +62,7 @@ To publish the **System.Image** or **System.Filedocument** entities as a [REST s See the [Operations](/refguide/generate-rest-resource/#operations) section of *Generating a Published REST Resource* for a description of each operation. -5. Click **OK**. +7. Click **OK**. The **Published REST service** document for the exposed image or file entity has been created and is now open on your screen. After you run your app, click the URL in the **Location** field to open the OpenAPI specs. @@ -70,7 +74,7 @@ Open your published REST service, then double-click the **Get by** key, or singl Click **Show** next to the **Microflow** field to view the **MyFirstModule.MyFile_Get_ByKey** microflow. The generated **Get by** key returns a file document. -### 2.2 Setting the MIME Type in a GET Microflow {#set-mime-type} +### 2.2 Adding the MIME Type to a GET Microflow {#set-mime-type} A `GET` request to the REST endpoint you created (in this example, `http://localhost:8080/rest/cmsapi/v1/myfile/1`) will return the binary for the first uploaded file. We need to specify the expected media type so that it returns the file in the expected way (for example, displaying an image). @@ -119,7 +123,7 @@ Test the service to ensure that it works! ## 3 Retrieve Images or Files with REST {#retrieve-files} -You can implement a client in your app that will retrieve binary files from any published REST service, from a Mendix app or anywhere else, and store them in a `FileDocument` entity. +You can implement a client in your app that will retrieve binary files from any published REST service, from a Mendix app or anywhere else, and store them in a `FileDocument` entity. 1. Right-click on the **File Explorer** and select **Add module**, then rename it as **CMSClient**. @@ -133,7 +137,7 @@ Then, you can retrieve the image with the [Image widget](#image-widget), retriev Retrieve images with the URL of the published REST service by using the [Image](/appstore/widgets/image/) widget available on the Mendix Marketplace. -Complete the steps in [Retrieve Files with REST](#retrieve-files), then do the following: +Complete the two steps in [Retrieve Files with REST](#retrieve-files), then do the following: 1. Download the [Image](/appstore/widgets/image/) widget from the Mendix Marketplace and import it into your app. 2. In the [Toolbox](/refguide/toolbox/), click **Widgets** and search for "Image". @@ -146,7 +150,7 @@ Complete the steps in [Retrieve Files with REST](#retrieve-files), then do the f Retrieve PDFs with the URL of the published REST service by using the [HTML/Javascript Snippet](/appstore/widgets/html-javascript-snippet/) widget available on the Mendix Marketplace. -Complete the steps in [Retrieve Files with REST](#retrieve-files), then do the following: +Complete the two steps in [Retrieve Files with REST](#retrieve-files), then do the following: 1. Download the [HTML/Javascript Snippet](/appstore/widgets/html-javascript-snippet) widget from the Mendix Marketplace and import it into your app. 2. In the [Toolbox](/refguide/toolbox/), click **Widgets** and search for "HTMLSnippet". @@ -161,7 +165,7 @@ Complete the steps in [Retrieve Files with REST](#retrieve-files), then do the f ### 3.3 Retrieving Files in a Microflow {#microflow-retrieve} -Complete the steps in [Retrieve Files with REST](#retrieve-files), then do the following: +Complete the two steps in [Retrieve Files with REST](#retrieve-files), then do the following: 1. Create a **GetImage** (or **GetFile**) microflow. * Right click in the **CMSClient** module and select **Add microflow**. @@ -175,7 +179,7 @@ Complete the steps in [Retrieve Files with REST](#retrieve-files), then do the f * **Type** – select the **RetrievedFile** entity * **Variable Name** – enter `GetResponseFile` -5. Drag a **Change object** action into the microflow after the **Call REST service** action, so that the list view will display the retrieved image. +3. Drag a **Change object** action into the microflow after the **Call REST service** action, so that the list view will display the retrieved image. * Double click the newly created action to open the properties. * In the **Object** field, select the **GetResponseFile** variable for the **RetrievedFile** entity. * In the **Refresh in client** field, select **Yes**. \ No newline at end of file From 6e8d5008480fdaa2e56d9d7e09ed8d853904dc2e Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Tue, 7 Feb 2023 20:41:24 +0100 Subject: [PATCH 22/33] More changes --- content/en/docs/refguide/modeling/integration/rest-binary.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 68076ec0f74..165845e5d55 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -179,7 +179,7 @@ Complete the two steps in [Retrieve Files with REST](#retrieve-files), then do t * **Type** – select the **RetrievedFile** entity * **Variable Name** – enter `GetResponseFile` -3. Drag a **Change object** action into the microflow after the **Call REST service** action, so that the list view will display the retrieved image. +3. Drag a **Change object** action into the microflow after the **Call REST service** action, so that the list view will display the retrieved image. * Double click the newly created action to open the properties. * In the **Object** field, select the **GetResponseFile** variable for the **RetrievedFile** entity. * In the **Refresh in client** field, select **Yes**. \ No newline at end of file From 14e31074b14074255fa7c4b3714d7947e047e06d Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Thu, 9 Feb 2023 14:45:06 +0100 Subject: [PATCH 23/33] Small change --- .../en/docs/refguide/modeling/integration/rest-binary.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 165845e5d55..3688f77952c 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -123,7 +123,7 @@ Test the service to ensure that it works! ## 3 Retrieve Images or Files with REST {#retrieve-files} -You can implement a client in your app that will retrieve binary files from any published REST service, from a Mendix app or anywhere else, and store them in a `FileDocument` entity. +You can implement a client in your app that will retrieve binary files from any published REST service, from a Mendix app or anywhere else, and store them in a `FileDocument` entity. 1. Right-click on the **File Explorer** and select **Add module**, then rename it as **CMSClient**. @@ -165,6 +165,10 @@ Complete the two steps in [Retrieve Files with REST](#retrieve-files), then do t ### 3.3 Retrieving Files in a Microflow {#microflow-retrieve} +You can call a REST service in a microflow, then store the response in an entity. + +Retriving files in a microflow uses the [Call REST service](/refguide/integration/call-rest-service/) action. For step-by-step instructions for calling a REST service in a microflow, see [Consume a REST Service](/howto/integration/consume-a-rest-service/). + Complete the two steps in [Retrieve Files with REST](#retrieve-files), then do the following: 1. Create a **GetImage** (or **GetFile**) microflow. From ea764392f3432dd076d7dbc4940b917dc2b7a8ce Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Fri, 10 Feb 2023 14:44:40 +0100 Subject: [PATCH 24/33] Rewording --- .../modeling/integration/rest-binary.md | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 3688f77952c..aa8f52100b4 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -121,7 +121,7 @@ Test the service to ensure that it works! 4. Click **Get/myfile/{myfileid}** to return the content, and you should see the PNG displayed. If you only see the binary, make sure that you have [set the MIME Type](#set-mime-type). -## 3 Retrieve Images or Files with REST {#retrieve-files} +## 3 Retrieve Images or Files from a Published REST Service {#retrieve-files} You can implement a client in your app that will retrieve binary files from any published REST service, from a Mendix app or anywhere else, and store them in a `FileDocument` entity. @@ -133,48 +133,51 @@ You can implement a client in your app that will retrieve binary files from any Then, you can retrieve the image with the [Image widget](#image-widget), retrieve a PDF with the [HTML/Javascript snippet widget](#html-snippet) for PDFs, or [retrieve images or PDFs with a microflow](#retrieve-microflow). -### 3.1 Retrieving Images with the Image Widget {#image-widget} +### 3.1 Retrieving Images Using the Image Widget {#image-widget} Retrieve images with the URL of the published REST service by using the [Image](/appstore/widgets/image/) widget available on the Mendix Marketplace. -Complete the two steps in [Retrieve Files with REST](#retrieve-files), then do the following: +To do so, do the following: -1. Download the [Image](/appstore/widgets/image/) widget from the Mendix Marketplace and import it into your app. -2. In the [Toolbox](/refguide/toolbox/), click **Widgets** and search for "Image". -3. Drag the **Image** widget onto a page. -4. Double-click the widget you dragged onto your page to open the **Properties**. -5. In the **Data source** field, select the **Image URL** for **Image type**. -6. Paste the location of the file in the REST service (for example, `http://localhost:8080/rest/cmsapi/v1/myfile/1`). +1. Complete the two steps in [Retrieve Files with REST](#retrieve-files). +2. Download the [Image](/appstore/widgets/image/) widget from the Mendix Marketplace and import it into your app. +3. In the [Toolbox](/refguide/toolbox/), click **Widgets** and search for "Image". +4. Drag the **Image** widget onto a page. +5. Double-click the widget you dragged onto your page to open the **Properties**. +6. In the **Data source** field, select the **Image URL** for **Image type**. +7. Paste the location of the file in the REST service (for example, `http://localhost:8080/rest/cmsapi/v1/myfile/1`). -### 3.2 Retrieving PDFs with the HTML/Javascript Snippet Widget {#html-snippet} +### 3.2 Retrieving PDFs Using the HTML/Javascript Snippet Widget {#html-snippet} Retrieve PDFs with the URL of the published REST service by using the [HTML/Javascript Snippet](/appstore/widgets/html-javascript-snippet/) widget available on the Mendix Marketplace. -Complete the two steps in [Retrieve Files with REST](#retrieve-files), then do the following: +To do so, do the following: -1. Download the [HTML/Javascript Snippet](/appstore/widgets/html-javascript-snippet) widget from the Mendix Marketplace and import it into your app. -2. In the [Toolbox](/refguide/toolbox/), click **Widgets** and search for "HTMLSnippet". -3. Drag the **HTMLSnippet** widget onto a page. -4. Double-click the widget you dragged onto your page to open the **Properties**. -5. In the **Content Type** field, ensure that **HTML** is selected. -6. In the **Contents** field, paste the HTML that includes the REST endpoint. For example: +1. Complete the two steps in [Retrieve Files with REST](#retrieve-files). +2. Download the [HTML/Javascript Snippet](/appstore/widgets/html-javascript-snippet) widget from the Mendix Marketplace and import it into your app. +3. In the [Toolbox](/refguide/toolbox/), click **Widgets** and search for "HTMLSnippet". +4. Drag the **HTMLSnippet** widget onto a page. +5. Double-click the widget you dragged onto your page to open the **Properties**. +6. In the **Content Type** field, ensure that **HTML** is selected. +7. In the **Contents** field, paste the HTML that includes the REST endpoint. For example: ```html ``` -### 3.3 Retrieving Files in a Microflow {#microflow-retrieve} +### 3.3 Retrieving Files Using a Microflow {#microflow-retrieve} -You can call a REST service in a microflow, then store the response in an entity. +You can call a REST service in a microflow, then store the binary response in an entity. Retriving files in a microflow uses the [Call REST service](/refguide/integration/call-rest-service/) action. For step-by-step instructions for calling a REST service in a microflow, see [Consume a REST Service](/howto/integration/consume-a-rest-service/). -Complete the two steps in [Retrieve Files with REST](#retrieve-files), then do the following: +To retrieve files using a microflow, do the following: -1. Create a **GetImage** (or **GetFile**) microflow. +1. Complete the two steps in [Retrieve Files with REST](#retrieve-files). +2. Create a **GetImage** (or **GetFile**) microflow. * Right click in the **CMSClient** module and select **Add microflow**. -2. Drag a **Call REST service** action into the microflow, and set the following properties: +3. Drag a **Call REST service** action into the microflow, and set the following properties: * In the **General** tab: * **Location** – the URL to your rest service and the specific file (for example, `http://localhost:8080/rest/cmsapi/v1/myfile/1`) * In the **Response** tab: @@ -183,7 +186,8 @@ Complete the two steps in [Retrieve Files with REST](#retrieve-files), then do t * **Type** – select the **RetrievedFile** entity * **Variable Name** – enter `GetResponseFile` -3. Drag a **Change object** action into the microflow after the **Call REST service** action, so that the list view will display the retrieved image. +4. For images: drag a **Change object** action into the microflow after the **Call REST service** action, so that the list view will display the retrieved image. * Double click the newly created action to open the properties. * In the **Object** field, select the **GetResponseFile** variable for the **RetrievedFile** entity. - * In the **Refresh in client** field, select **Yes**. \ No newline at end of file + * In the **Refresh in client** field, select **Yes**. + From 0683fa14897e33bbb94a6c65f9b85c350d978f71 Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Fri, 3 Mar 2023 10:35:01 +0100 Subject: [PATCH 25/33] Small change --- .../en/docs/refguide/modeling/integration/rest-binary.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index aa8f52100b4..f78190146c9 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -8,7 +8,7 @@ tags: ["rest", "binary", "send files", "receive files", "OData", "expose", "publ ## 1 Introduction -This guide will cover how to use REST to send and retrieve files, including images, in Studio Pro. +This guide covers how to use REST to send and retrieve files, including images, in Studio Pro. You will learn about the following: @@ -64,7 +64,9 @@ To publish the **System.Image** or **System.Filedocument** entities as a [REST s 7. Click **OK**. -The **Published REST service** document for the exposed image or file entity has been created and is now open on your screen. After you run your app, click the URL in the **Location** field to open the OpenAPI specs. +The **Published REST service** document for the exposed image or file entity has been created and is now open on your screen. + +After you run your app, click the URL in the **Location** field to view the OpenAPI specs. ### 2.1.1 Understanding the Service Details {#service-details} @@ -186,7 +188,7 @@ To retrieve files using a microflow, do the following: * **Type** – select the **RetrievedFile** entity * **Variable Name** – enter `GetResponseFile` -4. For images: drag a **Change object** action into the microflow after the **Call REST service** action, so that the list view will display the retrieved image. +4. For images: drag a **Change object** action into the microflow after the **Call REST service** action, so that the image viewer will display the retrieved image. * Double click the newly created action to open the properties. * In the **Object** field, select the **GetResponseFile** variable for the **RetrievedFile** entity. * In the **Refresh in client** field, select **Yes**. From 36a4f9a1856997e3eb6c89ac8daa6166659ba13b Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 6 Mar 2023 14:56:51 +0100 Subject: [PATCH 26/33] Remove extra space --- content/en/docs/refguide/modeling/integration/rest-binary.md | 1 - 1 file changed, 1 deletion(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index f78190146c9..40e2c5c4249 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -192,4 +192,3 @@ To retrieve files using a microflow, do the following: * Double click the newly created action to open the properties. * In the **Object** field, select the **GetResponseFile** variable for the **RetrievedFile** entity. * In the **Refresh in client** field, select **Yes**. - From 38d5cacd1c6834c6eadf56709e5929ccf1dcede8 Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Tue, 7 Mar 2023 11:26:08 +0100 Subject: [PATCH 27/33] Fix links --- .../activities/integration-activities/call-rest-action.md | 4 ++-- content/en/docs/refguide/modeling/integration/rest-binary.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/content/en/docs/refguide/modeling/application-logic/microflows-and-nanoflows/activities/integration-activities/call-rest-action.md b/content/en/docs/refguide/modeling/application-logic/microflows-and-nanoflows/activities/integration-activities/call-rest-action.md index 3a518859ee6..9cb481066f9 100644 --- a/content/en/docs/refguide/modeling/application-logic/microflows-and-nanoflows/activities/integration-activities/call-rest-action.md +++ b/content/en/docs/refguide/modeling/application-logic/microflows-and-nanoflows/activities/integration-activities/call-rest-action.md @@ -170,7 +170,7 @@ If the [export mapping](/refguide/export-mappings/) is based on a message defini ### 6.2 Binary for the Entire Request -This option allows you to send binary data (for example, the contents of a FileDocument). See [Send and Receive Files with REST](/reguide/rest-binary) for detailed information working with files with REST). +This option allows you to send binary data (for example, the contents of a FileDocument). See [Images and Files with REST](/refguide/rest-binary/) for detailed information working with files with REST). ### 6.3 Form-Data @@ -202,7 +202,7 @@ These are the options in the drop-down menu for handling the response: * **Apply import mapping** – if the response is JSON or XML, it can be transformed directly into objects using an [import mapping](/refguide/import-mappings/); the fields that you can choose here are described in the [Import Mapping action](/refguide/import-mapping-action/) * **Store in an HTTP response** – any successful HTTP response can be stored directly in an [HttpResponse](/refguide/http-request-and-response-entities/#http-response) object, and the [$latestHttpResponse](#latesthttpresponse) variable is also updated -* **Store in a file document** – if the response contains binary content (for example, a PDF), it can be stored in an object of an entity type which inherits from `System.FileDocument` (see [Send and Receive Files with REST](/reguide/rest-binary) for detailed information working with files with REST) +* **Store in a file document** – if the response contains binary content (for example, a PDF), it can be stored in an object of an entity type which inherits from `System.FileDocument` (see [Images and Files with REST](/refguide/rest-binary/)) for detailed information working with files with REST) * **Store in a string** – if the response is a string (for example, CSV), it can be stored directly in a string variable * **Do not store in a variable** - use this option when the call does not return anything useful diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 40e2c5c4249..433df2e7a1b 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -30,7 +30,7 @@ We recommend reading the following for some more background: * [Publishing](/howto/integration/publish-rest-service/) and [consuming](/howto/integration/consume-a-rest-service/) REST services * [Working with images and files](/howto/data-models/working-with-images-and-files/) in Studio Pro -## 2 Publish Files with REST {#create-service} +## 2 Send Files with REST {#create-service} Imagine that your app is functioning as a content management system (CMS), and you want to be able to send and receive images and files. You can publish the generalized entities as a REST service, which exposes the binary data of files stored in the entity. From 6cc681f048de0783747ad8adea998208f742440a Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Tue, 7 Mar 2023 11:33:59 +0100 Subject: [PATCH 28/33] Update links --- .../en/docs/refguide/modeling/integration/rest-binary.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 433df2e7a1b..699e5857969 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -28,7 +28,7 @@ To publish or retrieve files with REST, do the following: We recommend reading the following for some more background: * [Publishing](/howto/integration/publish-rest-service/) and [consuming](/howto/integration/consume-a-rest-service/) REST services -* [Working with images and files](/howto/data-models/working-with-images-and-files/) in Studio Pro +* Working with [Images, Videos and Files](/refguide/image-and-file-widgets/) in Studio Pro ## 2 Send Files with REST {#create-service} @@ -156,7 +156,7 @@ Retrieve PDFs with the URL of the published REST service by using the [HTML/Java To do so, do the following: 1. Complete the two steps in [Retrieve Files with REST](#retrieve-files). -2. Download the [HTML/Javascript Snippet](/appstore/widgets/html-javascript-snippet) widget from the Mendix Marketplace and import it into your app. +2. Download the [HTML/Javascript Snippet](/appstore/widgets/html-javascript-snippet/) widget from the Mendix Marketplace and import it into your app. 3. In the [Toolbox](/refguide/toolbox/), click **Widgets** and search for "HTMLSnippet". 4. Drag the **HTMLSnippet** widget onto a page. 5. Double-click the widget you dragged onto your page to open the **Properties**. @@ -171,7 +171,7 @@ To do so, do the following: You can call a REST service in a microflow, then store the binary response in an entity. -Retriving files in a microflow uses the [Call REST service](/refguide/integration/call-rest-service/) action. For step-by-step instructions for calling a REST service in a microflow, see [Consume a REST Service](/howto/integration/consume-a-rest-service/). +Retriving files in a microflow uses the [Call REST service](/refguide/integration/call-rest-action/) action. For step-by-step instructions for calling a REST service in a microflow, see [Consume a REST Service](/howto/integration/consume-a-rest-service/). To retrieve files using a microflow, do the following: From e96918463c7e1776f94e88a24ee22105e387ed94 Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Tue, 7 Mar 2023 11:45:12 +0100 Subject: [PATCH 29/33] Update links --- .../integration-activities/call-rest-action.md | 4 ++-- .../refguide/modeling/integration/rest-binary.md | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/content/en/docs/refguide/modeling/application-logic/microflows-and-nanoflows/activities/integration-activities/call-rest-action.md b/content/en/docs/refguide/modeling/application-logic/microflows-and-nanoflows/activities/integration-activities/call-rest-action.md index 9cb481066f9..6d475ae12bb 100644 --- a/content/en/docs/refguide/modeling/application-logic/microflows-and-nanoflows/activities/integration-activities/call-rest-action.md +++ b/content/en/docs/refguide/modeling/application-logic/microflows-and-nanoflows/activities/integration-activities/call-rest-action.md @@ -170,7 +170,7 @@ If the [export mapping](/refguide/export-mappings/) is based on a message defini ### 6.2 Binary for the Entire Request -This option allows you to send binary data (for example, the contents of a FileDocument). See [Images and Files with REST](/refguide/rest-binary/) for detailed information working with files with REST). +This option allows you to send binary data (for example, the contents of a FileDocument). See [Images and Files with REST](/refguide/send-receive-files-rest/) for detailed information working with files with REST). ### 6.3 Form-Data @@ -202,7 +202,7 @@ These are the options in the drop-down menu for handling the response: * **Apply import mapping** – if the response is JSON or XML, it can be transformed directly into objects using an [import mapping](/refguide/import-mappings/); the fields that you can choose here are described in the [Import Mapping action](/refguide/import-mapping-action/) * **Store in an HTTP response** – any successful HTTP response can be stored directly in an [HttpResponse](/refguide/http-request-and-response-entities/#http-response) object, and the [$latestHttpResponse](#latesthttpresponse) variable is also updated -* **Store in a file document** – if the response contains binary content (for example, a PDF), it can be stored in an object of an entity type which inherits from `System.FileDocument` (see [Images and Files with REST](/refguide/rest-binary/)) for detailed information working with files with REST) +* **Store in a file document** – if the response contains binary content (for example, a PDF), it can be stored in an object of an entity type which inherits from `System.FileDocument` (see [Images and Files with REST](/refguide/send-receive-files-rest/)) for detailed information working with files with REST) * **Store in a string** – if the response is a string (for example, CSV), it can be stored directly in a string variable * **Do not store in a variable** - use this option when the call does not return anything useful diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 699e5857969..9bd5d7c8c04 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -141,9 +141,9 @@ Retrieve images with the URL of the published REST service by using the [Image]( To do so, do the following: -1. Complete the two steps in [Retrieve Files with REST](#retrieve-files). +1. Complete the two steps in the [Retrieve Files with REST](#retrieve-files) section. 2. Download the [Image](/appstore/widgets/image/) widget from the Mendix Marketplace and import it into your app. -3. In the [Toolbox](/refguide/toolbox/), click **Widgets** and search for "Image". +3. In the [Toolbox](/refguide/view-menu/#toolbox/), click **Widgets** and search for "Image". 4. Drag the **Image** widget onto a page. 5. Double-click the widget you dragged onto your page to open the **Properties**. 6. In the **Data source** field, select the **Image URL** for **Image type**. @@ -155,9 +155,9 @@ Retrieve PDFs with the URL of the published REST service by using the [HTML/Java To do so, do the following: -1. Complete the two steps in [Retrieve Files with REST](#retrieve-files). +1. Complete the two steps in the [Retrieve Files with REST](#retrieve-files) section. 2. Download the [HTML/Javascript Snippet](/appstore/widgets/html-javascript-snippet/) widget from the Mendix Marketplace and import it into your app. -3. In the [Toolbox](/refguide/toolbox/), click **Widgets** and search for "HTMLSnippet". +3. In the [Toolbox](/refguide/view-menu/#toolbox), click **Widgets** and search for "HTMLSnippet". 4. Drag the **HTMLSnippet** widget onto a page. 5. Double-click the widget you dragged onto your page to open the **Properties**. 6. In the **Content Type** field, ensure that **HTML** is selected. @@ -167,7 +167,7 @@ To do so, do the following: ``` -### 3.3 Retrieving Files Using a Microflow {#microflow-retrieve} +### 3.3 Retrieving Files Using a Microflow {#retrieve-microflow} You can call a REST service in a microflow, then store the binary response in an entity. @@ -175,7 +175,7 @@ Retriving files in a microflow uses the [Call REST service](/refguide/integratio To retrieve files using a microflow, do the following: -1. Complete the two steps in [Retrieve Files with REST](#retrieve-files). +1. Complete the two steps in the [Retrieve Files with REST](#retrieve-files) section. 2. Create a **GetImage** (or **GetFile**) microflow. * Right click in the **CMSClient** module and select **Add microflow**. From f246579fa5e4dd7ac186aa383f13f53ddcc0adfc Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Tue, 7 Mar 2023 11:48:53 +0100 Subject: [PATCH 30/33] Wee change --- content/en/docs/refguide/modeling/integration/rest-binary.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 9bd5d7c8c04..9ea11b03b39 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -188,7 +188,8 @@ To retrieve files using a microflow, do the following: * **Type** – select the **RetrievedFile** entity * **Variable Name** – enter `GetResponseFile` -4. For images: drag a **Change object** action into the microflow after the **Call REST service** action, so that the image viewer will display the retrieved image. +4. For images: + Drag a **Change object** action into the microflow after the **Call REST service** action, so that the image viewer will display the retrieved image. * Double click the newly created action to open the properties. * In the **Object** field, select the **GetResponseFile** variable for the **RetrievedFile** entity. * In the **Refresh in client** field, select **Yes**. From e91388972761b140cacb9b19e891acee6ccb3deb Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Tue, 7 Mar 2023 13:11:06 +0100 Subject: [PATCH 31/33] Fix link --- content/en/docs/refguide/modeling/integration/rest-binary.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 9ea11b03b39..4c11adeaf38 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -143,7 +143,7 @@ To do so, do the following: 1. Complete the two steps in the [Retrieve Files with REST](#retrieve-files) section. 2. Download the [Image](/appstore/widgets/image/) widget from the Mendix Marketplace and import it into your app. -3. In the [Toolbox](/refguide/view-menu/#toolbox/), click **Widgets** and search for "Image". +3. In the [Toolbox](/refguide/view-menu/#toolbox), click **Widgets** and search for "Image". 4. Drag the **Image** widget onto a page. 5. Double-click the widget you dragged onto your page to open the **Properties**. 6. In the **Data source** field, select the **Image URL** for **Image type**. @@ -171,7 +171,7 @@ To do so, do the following: You can call a REST service in a microflow, then store the binary response in an entity. -Retriving files in a microflow uses the [Call REST service](/refguide/integration/call-rest-action/) action. For step-by-step instructions for calling a REST service in a microflow, see [Consume a REST Service](/howto/integration/consume-a-rest-service/). +Retriving files in a microflow uses the [Call REST service](/refguide/call-rest-action/) action. For step-by-step instructions for calling a REST service in a microflow, see [Consume a REST Service](/howto/integration/consume-a-rest-service/). To retrieve files using a microflow, do the following: From 7a958dcc2636a2fe5d0016a25a3d3caebdcdaf1f Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Mon, 13 Mar 2023 14:51:55 +0100 Subject: [PATCH 32/33] Fix typo --- content/en/docs/refguide/modeling/integration/rest-binary.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 4c11adeaf38..542f3847d3b 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -171,7 +171,7 @@ To do so, do the following: You can call a REST service in a microflow, then store the binary response in an entity. -Retriving files in a microflow uses the [Call REST service](/refguide/call-rest-action/) action. For step-by-step instructions for calling a REST service in a microflow, see [Consume a REST Service](/howto/integration/consume-a-rest-service/). +Retrieving files in a microflow uses the [Call REST service](/refguide/call-rest-action/) action. For step-by-step instructions for calling a REST service in a microflow, see [Consume a REST Service](/howto/integration/consume-a-rest-service/). To retrieve files using a microflow, do the following: From fa5f75a26d3e5ac5f3de7e012b3e01f52742c85a Mon Sep 17 00:00:00 2001 From: Johanna Hemminger Date: Tue, 14 Mar 2023 14:09:23 +0100 Subject: [PATCH 33/33] Fix another typo --- content/en/docs/refguide/modeling/integration/rest-binary.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/docs/refguide/modeling/integration/rest-binary.md b/content/en/docs/refguide/modeling/integration/rest-binary.md index 542f3847d3b..8289b0bffb9 100644 --- a/content/en/docs/refguide/modeling/integration/rest-binary.md +++ b/content/en/docs/refguide/modeling/integration/rest-binary.md @@ -17,7 +17,7 @@ You will learn about the following: * [Setting the MIME type](#set-mime-type) for supported files * [Retrieving files](#retrieve-files) with REST -If you are only interesting in consuming files, you can skip down to the [Retrieving Images and Files with REST](#retrieve-files) section. +If you are only interesting in consuming files, you can skip down to the [Retrieve Images and Files with REST](#retrieve-files) section. ### 1.1 Prerequisites