{"product_id":"138884","title":"Learning Backend Programming with FastAPI and Clean Architecture ","description":"\u003ccenter\u003e\u003cdiv style=\"text-align:center\"\u003e\u003cimg src=\"https:\/\/tmgdisk01.cafe24.com\/images\/vs\/4172\/sv\/3jXPeHtV6MKZ359uqOYEjlK4tZnoyY.png?v=1765069973\" style=\"max-width:100%;max-height:10px\"\u003e\u003c\/div\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\u003ccenter\u003e\n\n\u003cdiv style=\"width:95%\"\u003e\n\n\u003cdiv style=\"text-align:center;font-size:30px;font-weight:bolder;line-height:1.6em\"\u003e Learning Backend Programming with FastAPI and Clean Architecture \u003c\/div\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cdiv style=\"border-bottom:1px;border-bottom-style:dotted;border-color:;padding-bottom:20px\"\u003e\u003ccenter\u003e\u003ctable align=\"center\" width=\"100%\"\u003e\u003ctbody style=\"border:0px\"\u003e\n\n\u003ctr\u003e\u003ctd align=\"center\" style=\"line-height:1.2em;text-align:center;font-size:18px;color:black;font-weight:bold;padding-bottom:20px;\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\n\u003ctr\u003e\u003ctd style=\"text-align:center\"\u003e\u003cimg src=\"https:\/\/image.yes24.com\/goods\/133976149\/XL\" style=\"max-width:100%;height:auto\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\n\n\n\u003c\/tbody\u003e\u003c\/table\u003e\u003c\/center\u003e\u003c\/div\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cdiv style=\"width:95%;{split_style6}padding-top:20px;padding-bottom:20px\"\u003e\n\n\u003cdiv style=\"text-align:left;font-size:16px;font-weight:bold;padding-bottom:20px\"\u003e Description \u003c\/div\u003e\n\n\u003cdiv style=\"text-align:left;word-break:break-all;font-size:14px;line-height:1.6em;\"\u003e\n\n\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eBook Introduction\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e  \u003cdiv\u003e\n\u003cb\u003eModern, fast, and easy to use FastAPI\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e Python-based FastAPI makes API creation easier than Flask and lighter than Django.\u003cbr\u003e This book guides you through writing backend software with a clean architecture using FastAPI.\u003cbr\u003e Clean Architecture requires more code as its layers increase, but FastAPI, which facilitates layer division, is a web framework ideal for implementing Clean Architecture. To create a TIL app, we first learn the concepts and features of FastAPI and Clean Architecture. Then, we move on to member registration, introducing DI, CRUD functionality, JWT, setting environment variables, implementing Clean Architecture layers, and writing tests.\u003cbr\u003e By applying clean architecture, you will gain a powerful weapon called FastAPI.\u003cbr\u003e\n\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv\u003e\u003cul\u003e\u003cli\u003e You can preview some of the book's contents.\u003cbr\u003e \u003cspan\u003ePreview\u003c\/span\u003e\n\n\u003c\/li\u003e\u003c\/ul\u003e\u003c\/div\u003e\n\u003c\/div\u003e \",\"\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eindex\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e Beta Reader Review ix\u003cbr\u003e Beginning xii\u003cbr\u003e About this book xiv\u003cbr\u003e \u003cbr\u003e\u003cb\u003eCHAPTER 1 Building a FastAPI Development Environment 1\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 1.1 Introduction to FastAPI 1\u003cbr\u003e 1.2 Virtual Environment and Dependency Management Using ForeTree 5\u003cbr\u003e 1.3 Hello, FastAPI 10\u003cbr\u003e 1.4 API Documentation 14\u003cbr\u003e 1.5 Database Setup 19\u003cbr\u003e 1.6 Applications to be built from the book: TIL 22\u003cbr\u003e 1.7 Final 23\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 2 Clean Architecture 25\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 2.1 Why Architecture is Needed 25\u003cbr\u003e 2.2 Divide and Conquer 29\u003cbr\u003e 2.3 The four main layers of clean architecture 30\u003cbr\u003e __2.3.1 Domain (Entity) Layer 32\u003cbr\u003e __2.3.2 Application (Use Case) Layer 33\u003cbr\u003e __2.3.3 Interface (Interface Adapter) Layer 34\u003cbr\u003e __2.3.4 Infrastructure (Framework and Driver) Layer 35\u003cbr\u003e 2.4 Dependency Inversion Principle 36\u003cbr\u003e 2.5 Finish 37\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 3: Signing Up 39\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 3.1 User Domain 39\u003cbr\u003e 3.2 Membership Use Case 41\u003cbr\u003e __3.2.1 ULID 41\u003cbr\u003e __3.2.2 User Save 42\u003cbr\u003e __3.2.3 Duplicate User Check 44\u003cbr\u003e __3.2.4 Password Encryption 45\u003cbr\u003e 3.3 Membership Registration Interface 47\u003cbr\u003e __3.3.1 API Router 47\u003cbr\u003e __3.3.2 Validation using Pydantic 48 \u003cbr\u003e__3.3.3 Change the status code of validation errors to 400 Bad Request 50\u003cbr\u003e __3.3.4 Calling the Create User Use Case 52\u003cbr\u003e __3.3.5 Class-Based Router 53\u003cbr\u003e 3.4 Persisting Member Information 54\u003cbr\u003e __3.4.1 SQLAlchemy ORM Application 54\u003cbr\u003e __3.4.2 Creating Tables and Revision Management with Alembic 56\u003cbr\u003e __3.4.3 UserRepository Implementation 62\u003cbr\u003e 3.5 Finish 65\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 4 Dependency Injection 67\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 4.1 Depends 68\u003cbr\u003e 4.2 dependency-injector 69\u003cbr\u003e 4.3 Conclusion 74\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 5 Completing CRUD Functions for Member Resources 75\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 5.1 Added user memo properties 75\u003cbr\u003e 5.2 User Information Update 78\u003cbr\u003e 5.3 View user list 82\u003cbr\u003e __5.3.1 Creating User Data for Testing 82\u003cbr\u003e __5.3.2 User List Query 82\u003cbr\u003e __5.3.3 Paging 84\u003cbr\u003e 5.4 Membership Withdrawal (User Deletion) 88\u003cbr\u003e 5.5 Pydantic Validation 91\u003cbr\u003e __5.5.1 Request Parameter\/Body Inspection 91\u003cbr\u003e __5.5.2 Pydantic Response Model 95\u003cbr\u003e 5.6 Finish 97\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 6 Asynchronous Programming 99\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 6.1 How to handle concurrency in Python 99\u003cbr\u003e 6.2 Asynchronous Processing 101 in FastAPI\u003cbr\u003e 6.3 Asynchronous Application Criteria 104 \u003cbr\u003e6.4 Conclusion 105\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 7 Login 107\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 7.1 JWT 107\u003cbr\u003e __7.1.1 Header 109\u003cbr\u003e __7.1.2 Payload 110\u003cbr\u003e __7.1.3 Signature 111\u003cbr\u003e 7.2 Login 112\u003cbr\u003e 7.3 JWT Authentication\/Authorization 116\u003cbr\u003e __7.3.1 Adding a Role to a Token 116\u003cbr\u003e __7.3.2 API Authentication\/Authorization for General Users 118\u003cbr\u003e __7.3.3 Admin API Authentication\/Authorization 121\u003cbr\u003e 7.4 Final 124\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 8 ENVIRONMENT VARIABLES 125\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 8.1 dotenv 126\u003cbr\u003e 8.2 config.py: Environment Variable Management Module 127\u003cbr\u003e 8.3 Applying Environment Variables 128\u003cbr\u003e 8.4 Finish 130\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 9 TIL Note 131\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 9.1 Domain Layer Implementation 132\u003cbr\u003e 9.2 Application Layer Implementation 134\u003cbr\u003e 9.3 Implementing the Interface Layer 139\u003cbr\u003e __9.3.1 Creating Notes 140\u003cbr\u003e __9.3.2 View note list\/View note details 141\u003cbr\u003e __9.3.3 Note Update 143\u003cbr\u003e __9.3.4 Delete Note 144\u003cbr\u003e __9.3.5 Searching notes by tag name 144\u003cbr\u003e 9.4 Implementing the Infrastructure Layer 145\u003cbr\u003e __9.4.1 Note, Tag Table Modeling 145\u003cbr\u003e __9.4.2 Table Migration 147\u003cbr\u003e __9.4.3 Note Repository: Note Views 150\u003cbr\u003e __9.4.4 Note Repository: Creating Notes 152\u003cbr\u003e __9.4.5 Note Repository: Note Update 153 \u003cbr\u003e__9.4.6 Note Storage: Deleting Notes 154\u003cbr\u003e __9.4.7 Note Storage: Viewing Notes by Tag Name 155\u003cbr\u003e 9.5 Finish 156\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 10 Background Tasks: Sending Welcome Emails 157\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 10.1 BackgroundTasks 158\u003cbr\u003e __10.1.1 What are BackgroundTasks? 158\u003cbr\u003e __10.1.2 Sending Email with BackgroundTasks 160\u003cbr\u003e 10.2 Celery 166\u003cbr\u003e __10.2.1 What is celery? 166\u003cbr\u003e __10.2.2 Celery Preferences 169\u003cbr\u003e __10.2.3 Example of executing a Celery task 171\u003cbr\u003e __10.2.4 Sending Email with Celery 176\u003cbr\u003e 10.3 Final 178\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 11 Middleware 179\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 11.1 Middleware Example 181\u003cbr\u003e 11.2 Context Variables 183\u003cbr\u003e 11.3 Logging to track user activity 186\u003cbr\u003e __11.3.1 Middleware that stores user information as context variables 186\u003cbr\u003e __11.3.2 Custom Logger 188\u003cbr\u003e __11.3.3 Log output with user ID 190\u003cbr\u003e 11.4 Final 191\u003cbr\u003e\u003cbr\u003e \u003cb\u003eCHAPTER 12 TESTING 193\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e 12.1 Domain Layer Testing 194\u003cbr\u003e 12.2 Application Layer Testing 196\u003cbr\u003e __12.2.1 Test Double 197\u003cbr\u003e __12.2.2 User Creation Use Case Testing 198\u003cbr\u003e 12.3 Interface Layer Testing 204 \u003cbr\u003e12.4 Infrastructure Layer Testing 206\u003cbr\u003e 12.5 Finish 209\u003cbr\u003e\u003cbr\u003e Search 212\u003c\/div\u003e\n\u003cdiv\u003e\u003c\/div\u003e\n\u003c\/div\u003e \",\"\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eDetailed image\u003c\/b\u003e \u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\u003cdiv\u003e\u003cimg src=\"https:\/\/image.yes24.com\/momo\/TopCate4791\/MidCate001\/479008017.jpg\" border=\"0\" alt=\"Detailed Image 1\"\u003e\u003c\/div\u003e\u003c\/div\u003e \",\"\u003cdiv\u003e\u003ch5\u003e \u003cb\u003eInto the book\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e Once you create an API, you need to communicate it to other members who will use it.\u003cbr\u003e If your organization is small and your API users are in the same space and understand the framework's code, sharing the source code is fine.\u003cbr\u003e But how do you explain how to use an API when it's being used by front-end developers with different languages ​​and technology stacks? You can either describe it in text format or organize it in a spreadsheet for easy viewing.\u003cbr\u003e Even today, many people still use this method.\u003cbr\u003e But just like programs, once documentation becomes legacy, it is difficult to change.\u003cbr\u003e The best way to distribute documentation is to generate API documentation from your source code, and FastAPI supports this without any special setup.\u003cbr\u003e --- p.15\u003cbr\u003e \u003cbr\u003eThe dependency rule of clean architecture is that the direction of dependency is inward.\u003cbr\u003e On the left side of Figure 2-1, there are arrows pointing inward from the outer layer.\u003cbr\u003e This arrow indicates the direction of dependency.\u003cbr\u003e The format of the data is also the same.\u003cbr\u003e High-level data types can be used freely at low levels.\u003cbr\u003e However, high-level components should not depend on low-level data types.\u003cbr\u003e This is to isolate and protect internal elements from external changes.\u003cbr\u003e Externally provided frameworks or libraries can be updated regardless of our will.\u003cbr\u003e When such changes occur, if you are directly dependent on modules from that library, you will need to modify the internal elements as well.\u003cbr\u003e --- p.36\u003cbr\u003e\u003cbr\u003e The properties that allow users to update their information in the user resource are name and password. \u003cbr\u003eNormally it would be weird to update your name, but in TIL it's not a problem since you'll be using your name as a nickname.\u003cbr\u003e Let's assume that email is a unique value that cannot be changed because it is the value that the user uses to log in.\u003cbr\u003e \/ Let's implement it again starting from the domain layer.\u003cbr\u003e First, declare a function to search for a user by user ID in IUserRepository and a function to update the user resource.\u003cbr\u003e The reason we need a user search function is to find the target to update.\u003cbr\u003e If the user does not exist in the database, an error occurs.\u003cbr\u003e\u003cbr\u003e --- p.78\u003cbr\u003e\u003cbr\u003e When operating a system, there are times when you need to assign various roles to logged-in users.\u003cbr\u003e Access to resources is restricted based on roles, and roles are grouped and managed hierarchically. \u003cbr\u003e\/ Among the APIs listed above, users should only be able to call APIs that they have the authority to execute.\u003cbr\u003e Users can only use the user deletion API, which means withdrawing membership, and the user information update API, which updates their information.\u003cbr\u003e Since users should not be able to arbitrarily look up other people's information, let's say that only the administrator (p. application manager) can look up the user list.\u003cbr\u003e Therefore, an authorization function that checks permissions is needed.\u003cbr\u003e Establishing a proper authorization system is beyond the scope of this book.\u003cbr\u003e In this book, we simply add a payload called role to the token and check the permissions by distinguishing whether the value is USER or ADMIN.\u003cbr\u003e\u003cbr\u003e --- p.117\u003cbr\u003e\u003cbr\u003e BackgroundTasks is a helper class provided by FastAPI.\u003cbr\u003e This class allows you to perform tasks in the background after receiving a request from a client. \u003cbr\u003eAs we saw in the previous example, when processing an HTTP request, if the task is long-running or needs to be processed asynchronously, you may want to send a response to the client immediately and process the task in the background.\u003cbr\u003e This will improve the usability of the client.\u003cbr\u003e That is, you can continue with other tasks without waiting for the request to complete.\u003cbr\u003e \/ The BackgroundTasks class makes it easy to handle these tasks in your FastAPI app.\u003cbr\u003e As you can see in the following example, you can inject it as a parameter to your endpoint function and let FastAPI handle the rest.\u003cbr\u003e It's the same as when you directly inject and use the Request object.\u003cbr\u003e\u003cbr\u003e --- p.158\u003cbr\u003e\u003cbr\u003e Celery (p.Celery) is a distributed task queue (p.distributed task queue) based on Unix systems, used to process and manage asynchronous tasks. \u003cbr\u003eIt mainly handles or schedules background tasks and executes them in a distributed environment.\u003cbr\u003e In addition to Celery, other Python-based messaging systems worth considering include Redis Queue (p.Redis queue, RQ), Dramatic (p.Dramatiq), Huey (p.huey), and AIOHTTP.\u003cbr\u003e In addition, Kafka--- p.Kafka) is gaining popularity recently as it boasts high performance even in large-scale systems.\u003cbr\u003e\n\n\u003c\/div\u003e\n\u003cdiv\u003e --- pp.166-167\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv\u003e\u003c\/div\u003e\n\u003c\/div\u003e \",\"\u003cdiv\u003e\u003ch5\u003e \u003cb\u003ePublisher's Review\u003c\/b\u003e\n\u003c\/h5\u003e\u003c\/div\u003e\n\u003cdiv\u003e\n\u003cdiv\u003e \u003cb\u003eEliminate Spaghetti Code with FastAPI and Clean Architecture\u003c\/b\u003e\u003cbr\u003e\u003cbr\u003e FastAPI ranked 14th in the 'Web Frameworks and Technologies' category conducted by Stack Overflow in 2024.\u003cbr\u003e Among Python web frameworks, it ranks third after Flask and Django, and has been rapidly catching up with Flask and Django since its debut in 2018. \u003cbr\u003eEven though version 1 has not yet been officially released, it has many advantages, including excellent performance and intuitive usability, and is being adopted by many companies, including Netflix, Uber, and Cisco Systems.\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e Since FastAPI already has a very well-organized official documentation, this book focuses on software structure design using FastAPI and clean architecture that maximizes maintainability and scalability.\u003cbr\u003e One of the most important factors in backend development today is an efficient and scalable architecture.\u003cbr\u003e A system without a 'proper' architecture is nothing more than a big lump of spaghetti code and mud.\u003cbr\u003e This 12-chapter book presents methods for creating maintainable and stable systems by applying clean architecture based on the powerful features of FastAPI.\u003cbr\u003e \u003cbr\u003eChapter 1 briefly looks at the features of FastAPI, how to build a development environment using Fortree, and the structure of the TIL app that will be created in the book.\u003cbr\u003e In Chapter 2, we will learn about clean architecture by dividing it into domain, application, interface, and infrastructure layers.\u003cbr\u003e In Chapter 3, we will implement membership registration, one of the core functions of the TIL app service, using FastAPI while applying clean architecture.\u003cbr\u003e\u003cbr\u003e In Chapter 4, dependency injection is introduced to the membership registration function implemented in Chapter 3, and in Chapter 5, an API for searching, modifying, and deleting user information is completed using Pydantic.\u003cbr\u003e Chapter 6 looks at an example of performing asynchronous processing, one of the methods for handling concurrency in FastAPI.\u003cbr\u003e In Chapter 7, we will learn about and apply JWT, which is most commonly used for authentication\/authorization, while creating a function that allows users who have signed up for the TIL service to log in.\u003cbr\u003e \u003cbr\u003eIn Chapter 8, we will look at managing hard-coded values ​​in the code as environment variables, and in Chapter 9, we will look at an example of extending the functionality of the TIL service to handle user-written post (note) resources.\u003cbr\u003e Chapter 10 covers background task methods that can be applied when developing a server with FastAPI, and Chapter 11 covers how to utilize middleware.\u003cbr\u003e Finally, in Chapter 12, we write test code for the code we've written to make it easy to perform repetitive tests and build secure systems.\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e This book is a useful guide for developers who are considering better software design methods beyond simple functional implementation through FastAPI and Clean Architecture.\u003cbr\u003e It will be of practical help to developers who want to build stable and scalable backend systems, especially in the rapidly changing web development environment.\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e \u003cb\u003eKey Contents\u003c\/b\u003e\u003cbr\u003e \u003cbr\u003e● Concepts and functions of FastAPI and Clean Architecture\u003cbr\u003e ● Validation using Pydantic\u003cbr\u003e ● DI method and application method\u003cbr\u003e ● Using JWT for authentication\/authorization\u003cbr\u003e Asynchronous processing using Celery\u003cbr\u003e ● How to use middleware that makes HTTP requests and responses easier\u003cbr\u003e ● How to apply unit tests by layer\u003c\/div\u003e\n\u003cdiv\u003e\u003c\/div\u003e\n\u003c\/div\u003e \"]\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cdiv style=\"width:95%;padding-top:20px;padding-bottom:20px\"\u003e\n\n\u003cdiv style=\"text-align:left;font-size:16px;font-weight:bold;padding-bottom:20px\"\u003e GOODS SPECIFICS \u003c\/div\u003e\n\n\u003cdiv style=\"text-align:left;font-size:14px;line-height:1.6em;\"\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003eDate of issue:\u003c\/strong\u003e October 25, 2024\u003c\/div\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003ePage count, weight, size:\u003c\/strong\u003e 232 pages | 580g | 188*245*15mm\u003c\/div\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003eISBN13:\u003c\/strong\u003e 9791193926529\u003c\/div\u003e\n\n\u003cdiv style=\"width:100%;margin-bottom:5px;line-height:1.6em;font-size:14px\"\u003e - \u003cstrong\u003eISBN10:\u003c\/strong\u003e 1193926521 \u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\n\u003c\/div\u003e\n\n\u003ccenter\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003ccenter\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd style=\"height:10px\"\u003e\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/center\u003e\n\n\u003cspan\u003e\u003c\/span\u003e\n\n\u003c\/center\u003e\n\n\n\u003c\/center\u003e","brand":"LIBRAIRIE COREENNE","offers":[{"title":"Default Title","offer_id":43893326807082,"sku":"138884","price":33.0,"currency_code":"EUR","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0683\/2750\/5962\/files\/b4b14f910375e0e7b3cc01f8e41c0d18.jpg?v=1765396262","url":"https:\/\/librairie.coreenne.fr\/en\/products\/138884","provider":"LIBRAIRIE COREENNE","version":"1.0","type":"link"}